使用Core Animation,有没有办法为几个CALayers分组动画?

时间:2009-01-06 22:19:19

标签: animation core-animation

我有一种情况,我有很多CALayers以“回合制”的方式制作动画。我为每个CALayers上的位置设置动画,但它们具有完全相同的持续时间。一旦所有这些CALayer完成动画制作,就会启动一个新的“转弯”,并再次动画更改位置。

整个想法是,通过位置之间的线性插值,以及以恒定速度,状态到状态之间的基于回合的过渡看起来像实时动画。然而,使用许多不同的CALayer很难实现这一点。

CAAnimationGroup用于将动画集中在一个CALayer上。但我想知道,是否有一个简单的解决方案可以在几个CALayers上组合动画,这些动画应该具有相同的持续时间?

编辑包含回复Kevin Ballard的问题

我的问题在于此。我正在为每个CALayers创建动画,然后放置 那些在NSArray。一旦我得到单个动画结束的回调,我就从NSArray中删除它。一旦它为空,我再次为它们创建动画。

如果有多个图层,则所有动画的完成位置和新动画的开始位置之间会有明显的延迟。

我想如果我可以将所有这些动画组合成一个动画,那么可以在动画之间没有延迟的情况下动画更多层。从而不会破坏连续动画的错觉。

4 个答案:

答案 0 :(得分:5)

如果您在单个方法中将动画附加到多个CALayers,它们将全部(有效地)同时开始。我在一个有落球的益智游戏中使用这种方法,在动画结束时我将动画的下一个阶段附加到需要进一步动画的任何球上。

我一次动画最多60个CALayers并且没有在动画的各个阶段之间遇到任何延迟,但是我没有将动画缓存到任何类型的数组中,我不确定你有那么多的开销

我的动画相对简单,并且可以动态创建并附加到每个CALayer。我的精灵是60像素正方形,并使用几十个可能的图像来表示他们的内容。

在某些情况下,我可以使用不同的开始时间(使用beginTime)创建多个动画,我将它们与CAAnimationGroup捆绑在一起 - 但您可能无法预先计算后续动画。

答案 1 :(得分:2)

如果您将动画包装在CATransaction中,CG将确保它们都在主循环的同一次迭代中运行。

[CATransaction begin]; //你的所有动画 [CATransaction commit];

答案 2 :(得分:0)

如果您同时将3个动画添加到3个不同的图层,并且它们具有相同的持续时间,我希望它们一起动画。你看到了什么行为?

答案 3 :(得分:0)

cp21yos:你能详细说明你的方法吗?我正在尝试做类似的事情,其中​​涉及一次动画多个图层,不止一次。你说:“在动画结束时,我附上动画的下一个阶段”。你能解释一下吗?当我尝试在animationDidStop事件中放置逻辑以执行其他动画时,只发生最后一个动画,而不是整个动画序列。