如何为不同的对象链接和分组核心动画?

时间:2012-01-28 00:52:16

标签: ios core-animation calayer

假设我有3个CALayers(方块,不同颜色,为了举例)。 我想执行以下动画:

layer1同时翻译并从位置A缩放到位置B.

一旦layer1处于其新位置并具有其新大小,则layer2和3同时分别从位置C和D转换到位置E和F.这些层(2和3)也会在它们转换为E和F时淡入。但是layer2也会在平移时进行缩放,而layer3只会进行平移(但是使用CAKeyframeAnimation,这样当它到达F点时它会产生一点有弹性的上下效果)。

  1. 对于第1层,我可以:

    • 使用持续时间设置为的唯一设置创建CABasicAnimation, 说1,并将其添加到layer1以进行关键“转换”创建翻译
    • 缩放变换并将其应用于图层
  2. 对于layer2,与layer1相同,但也设置不透明度。

  3. 对于layer3,我会创建一个关键帧动画。并设置不透明度。

  4. 从上面开始:

    似乎调用layer2 setTransform:后跟setOpacity:同时生成动画。但这是确保它们同时发生的正确方法,还是应该使用像CAAnimationGroup这样的东西?

    通过连接矩阵进行翻译和缩放是否有意义?使用矩阵而不是设置位置是否有意义?

    如何链接这些,以便layer2和layer3的动画在layer1完成之前不会开始,然后,layer2的变换和不透明度与layer3的关键帧和不透明度动画同时发生?

1 个答案:

答案 0 :(得分:2)

我今天做了一些非常相似的事情。我正在混合CGAffineTransform和CABasicAnimations,它引起了最尴尬的错误..无论如何。

设置动画以在完成后执行方法我很确定我正在使用:

[self performSelector:@selector(animationDone) withObject:nil afterDelay:0.0];

在我使用的一个方法中完成3个CABasicAnimations之后,CAAnimationGroup一次调用所有3个。完成第一个动画组后,它会调用animationDone方法来启动后续动画的下一个方法。

还必须小心:

animationObject.fillMode = kCAFillModeForwards; //b/c of object's coordinate changes
animationObject.removedOnCompletion = NO;