objective-c - CATransform3D 动画的 CAKeyframeAnimation 上的平滑动画

标签 objective-c ios core-animation catransform3d

我已经在 View 之间创建了自己的过渡动画。我为两个属性(位置和变换)设置动画,以在 View 之间提供类似立方体的过渡。框架使用 CABasicAnimation,而转换使用“2-stage”CAKeyframeAnimation。除了一个我似乎无法弄清楚的小细节外,一切都很好。在我的过渡中,我在中间关键帧上应用了 CATransform3DScale 以创建放大/缩小效果。除了动画看起来有点生涩之外,效果很好。它以线性方式在关键帧之间设置动画,我想将其平滑化。现在 CAKeyframeAnimation 有办法使用 calculationMode 来做到这一点,但它似乎不适用于转换。我试过将它设置为 kCAAnimationCubickCAAnimationCubicPaced 但没有效果。

这是为一个 View 的变换设置动画的代码(类似的代码块为另一个 View 设置动画):

    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) 是一个 block ,它返回在 X 上按所需弧度旋转的 View 的变换。

如您所见,我只在中间关键帧上设置了缩放变换。此外, View 的旋转非常平滑,只是缩放在改变方向时出现“颠簸”。

有没有人对如何平滑缩放/缩放有任何想法?

最佳答案

试试 timingFunctions 属性。由于您有 3 个关键帧,因此需要 2 个计时函数:一个用于从关键帧 0 到关键帧 1 的动画,另一个用于从关键帧 1 到关键帧 2 的动画。

aTransform.timingFunctions = [NSArray arrayWithObjects:
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInOut],
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInOut],
    nil];

关于objective-c - CATransform3D 动画的 CAKeyframeAnimation 上的平滑动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11586973/

相关文章:

objective-c - 如何修复 NSArray 属性上的 EXC_BAD_ACCESS?

objective-c - __weak NSString *text = self.textField.text 具有不一致的行为

android - 具有捕获和接受属性的 HTML 文件输入控件工作错误?

ios - 当使用@dynamic在类别中添加@property时,getter/setter如何实现

ios - 打破 for 循环以快速调用同步 Web 服务

ios - iOS 中的触摸事件转发

iphone - Core Animation中关键路径的作用是什么?

ios - 在哪里可以找到使用 Core Animation 和 Monotouch 的一些示例?

ios - 动画 UIImageView 逐行出现在屏幕上

ios - 如何在自定义 View 中将 subview 的框架设置为其父框架