Я создал собственную анимацию перехода между представлениями. Я анимирую два свойства, позицию и преобразование, чтобы обеспечить переход между представлениями в виде куба. Фрейм использует CABasicAnimation
, в то время как преобразование использует "2 этапа" CAKeyframeAnimation
. Все работает нормально, за исключением одной маленькой детали, которую я не могу понять. В своем переходе я применяю CATransform3DScale
к среднему ключевому кадру, чтобы создать эффект увеличения / уменьшения. Это отлично работает, за исключением того, что анимация выглядит немного отрывистой. Это линейная анимация между ключевыми кадрами, и я хотел бы это сгладить. Теперь у CAKeyframeAnimation
есть способ сделать это с помощью calculationMode
, но, похоже, он не работает для преобразований. Я пробовал установить его на kCAAnimationCubic
и kCAAnimationCubicPaced
, но безрезультатно.
Вот код, который анимирует преобразование одного представления (аналогичный блок кода анимирует другое представление):
CAKeyframeAnimation *aTransform = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
CATransform3D transform1 = RotateOnX(toView, M_PI_4);
transform1 = CATransform3DScale(transform1, RotationalZoom, RotationalZoom, RotationalZoom);
[aTransform setValues:Array([NSValue valueWithCATransform3D:RotateOnX(toView, M_PI_2)],
[NSValue valueWithCATransform3D:transform1],
[NSValue valueWithCATransform3D:RotateOnX(toView, 0)])];
[toView.layer addAnimation:aTransform forKey:@"transform"];
Примечание. RotateOnX(UIView *, CGFloat)
- это блок, который возвращает преобразование для вида, повернутого по оси X на желаемые радианы.
Как видите, я установил масштабирующее преобразование только для среднего ключевого кадра. Кроме того, вращение обзора идеально плавное, только масштабирование кажется «рывком» при изменении направления.
Есть у кого-нибудь идеи, как сгладить масштабирование / масштабирование?