【问题标题】:Smooth Animation on CAKeyframeAnimation for CATransform3D animationsCATransform3D 动画的 CAKeyframeAnimation 上的平滑动画
【发布时间】:2012-07-20 21:09:45
【问题描述】:

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

下面是为一个视图的变换设置动画的代码(类似的代码块为另一个视图设置动画):

    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 上按所需弧度旋转的视图返回变换。

如您所见,我只在中间关键帧上设置了缩放变换。此外,视图的旋转非常平滑,只有缩放在改变方向时才会出现“混蛋”。

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

【问题讨论】:

    标签: objective-c ios core-animation catransform3d


    【解决方案1】:

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

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

    【讨论】:

    • 对不起,我不清楚...我使用“框架”来捕获所有边界、锚点和位置。事实上,我确实只为位置设置动画以及修改后的锚点来“移动”我的视图。我会更新我的问题以澄清。
    • 哦,天哪……我完全错过了,我在 6 小时内至少查看了这些课程文档 10 次……呃。它完美地工作。说真的,谢谢!
    • 哦,仅供参考 - 当你放松然后放松时效果更好:[NSArray arrayWithObjects: [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut], [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn], nil];
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 2012-12-20
    • 2013-04-02
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多