У меня есть UIView, я хочу анимировать его с вращением. Я тоже хочу использовать автозапуск. Я уже видел много общих вопросов stackoverflow, но я не нашел подходящего решения. Итак, давайте начнем с моего интерфейса и кода анимации; У меня есть UIView с изображением, которое должно быть повернуто. И прямо сейчас у меня есть кнопка, которая активирует поворот. На скриншоте вы можете увидеть красный крест, это должен быть центр вращения (прямо сейчас он находится на изображении, но я хочу сделать центр вращения за пределами повернутого UIView, я знаю, что это может быть архивировано с помощью AnchorPoint).Autolayout нарушает трансляцию вращения анимации
Это мой поворот код анимации:
#define ROTATE_DURATION 3.0
- (IBAction)rotateArrow {
CGAffineTransform transform = self.hand.transform;
NSLog(@"layer possition before animation x: %f; y: %f",self.hand.layer.position.x,self.hand.layer.position.y);
[UIView animateWithDuration:ROTATE_DURATION/3 delay:0.0 options:UIViewAnimationOptionCurveLinear animations:^{
self.hand.transform = CGAffineTransformRotate(transform, 2*M_PI/3) ;
[self.hand layoutIfNeeded];
NSLog(@"layer possition after animation 1 x: %f; y: %f",self.hand.layer.position.x,self.hand.layer.position.y);
}
completion:^(BOOL finished) {
[UIView animateWithDuration:ROTATE_DURATION/3 delay:0.0 options:UIViewAnimationOptionCurveLinear animations:^{
self.hand.transform = CGAffineTransformRotate(transform, -2*M_PI/3) ;
[self.hand layoutIfNeeded];
NSLog(@"layer possition after animation 2 x: %f; y: %f",self.hand.layer.position.x,self.hand.layer.position.y);
}
completion:^(BOOL finished) {
[UIView animateWithDuration:ROTATE_DURATION/3 delay:0.0 options:UIViewAnimationOptionCurveLinear animations:^{
self.hand.transform = CGAffineTransformRotate(transform, 0) ;
[self.hand layoutIfNeeded];
NSLog(@"layer possition after animation 3 x: %f; y: %f",self.hand.layer.position.x,self.hand.layer.position.y);
}
completion:^(BOOL finished) {
}];
}];
}];
}
Итак, в чем проблема: Когда вращение в прогресс UIView изменяет это center
и layer.position
собственность, поэтому мой UIView является «скачками "при анимации. Если автоотключение выключено, анимация в порядке. Я смотрел WWDC 2012 «Автоматический макет по примеру» и обнаружил, что я бы использовал [self.hand layoutIfNeeded];
все было бы прекрасно, но это совсем не так. Анимация стала немного более гладкой, но я вижу, что это «прыгает». Итак, вот мой «выход».
Когда это оживляющее, UIView идет направо, как вы можете видеть на изображении, и чем спина к нормальному положению. Как я могу исправить это «прыжки»?
Вот лог:
layer possition before animation x: 160.000000; y: 99.500000
layer possition after animation 1 x: 197.349030; y: 114.309601
layer possition after animation 2 x: 197.349030; y: 114.309601
layer possition after animation 3 x: 160.000000; y: 99.500000
Спасибо.
Я не открывал ссылку еще, но я хочу сказать, что я должен «снять» ограничения из моего UIView, преобразовать его и затем добавить обратно ограничения? –
Нет, я говорю, что у вас не должно быть никаких ограничений, связанных с вашим представлением, в то время как его преобразование не является преобразованием идентичности. –
Хотя это не правильный ответ как таковой, он приводит к невероятно информативному сообщению об источнике проблемы. Очень полезно. Спасибо! –