更改正在进行的CAKeyframeAnimation动画的速度

时间:2011-12-04 19:50:57

标签: objective-c ios core-animation

我将一个带有Key“SpeedBoat”的CAKeyframeAnimation添加到CALayer。现在我想在动画期间改变动画的速度。

[[self.shipLayer animationForKey:@"SpeedBoat"] setSpeed:([[self.shipLayer animationForKey:@"SpeedBoat"] speed] + deltaTime)];

这一行似乎有错误。但我没有得到任何调试信息。 这有什么不对?是否可以改变正在进行的动画的速度?

如果有人可以帮助我,那将是非常好的:)

祝你好运 xen的

1 个答案:

答案 0 :(得分:1)

是的,你绝对可以改变动画的速度。这是因为CAKeyframeAnimation确认了协议CAMediaTiming

Apple在他们的Animation Types and Timing Programming Guide中解释了这一点。

请查看Timing, Timespaces, and CAAnimation上的部分。

具体做法是:

  

“动画或图层的速度属性指定此比例因子。例如,附加到具有速度值为2的时空的图层的10秒动画将需要5秒才能显示(速度的两倍)如果该层的子层也定义了速度因子2,那么它的动画将以1/4的时间显示(超层的速度*子层的速度)。“

我是否还可以指出一些涵盖此内容的优秀视频?看看:

WWDC 2010 Sessions 424 and 425 Core Animation in Practice Parts 1 and 2

WWDC 2011 Session 421 Core Animation Essentials

Developer Videos Session 716 Core Animation Techniques for iPhone and Mac

您甚至可以更改动画的速度以有效地“冻结”它。它对于暂停和恢复非常有用。虽然有一点需要注意,如果应用程序背景化或从内存中清除,它将无法正常运行。你必须手动处理。

有关该流程的详情,请参阅Technical Q&A QA1673以及我对此问题的回答:

Is there an issue with updating a CALayer position while the layer is paused?