我在视图之间创建了自己的过渡动画。我为两个属性(位置和变换)设置动画,以在视图之间提供类似立方体的过渡。框架使用CABasicAnimation
,而变换使用“2-stage” CAKeyframeAnimation
。一切都很好,除了一个我似乎无法弄清楚的小细节。在我的过渡中,我CATransform3DScale
在中间关键帧上应用 a 来创建放大/缩小效果。效果很好,只是动画看起来有点生涩。它以线性方式对关键帧之间的动画进行动画处理,我想对其进行平滑处理。现在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 上按所需弧度旋转的视图返回变换。
如您所见,我只在中间关键帧上设置了缩放变换。此外,视图的旋转非常平滑,只有缩放在改变方向时才会出现“混蛋”。
有人对如何平滑缩放/缩放有任何想法吗?