假设我有3个CALayers(方块,不同颜色,为了举例)。 我想执行以下动画:
layer1同时翻译并从位置A缩放到位置B.
一旦layer1处于其新位置并具有其新大小,则layer2和3同时分别从位置C和D转换到位置E和F.这些层(2和3)也会在它们转换为E和F时淡入。但是layer2也会在平移时进行缩放,而layer3只会进行平移(但是使用CAKeyframeAnimation,这样当它到达F点时它会产生一点有弹性的上下效果)。
对于第1层,我可以:
对于layer2,与layer1相同,但也设置不透明度。
对于layer3,我会创建一个关键帧动画。并设置不透明度。
从上面开始:
似乎调用layer2 setTransform:后跟setOpacity:同时生成动画。但这是确保它们同时发生的正确方法,还是应该使用像CAAnimationGroup这样的东西?
通过连接矩阵进行翻译和缩放是否有意义?使用矩阵而不是设置位置是否有意义?
如何链接这些,以便layer2和layer3的动画在layer1完成之前不会开始,然后,layer2的变换和不透明度与layer3的关键帧和不透明度动画同时发生?
答案 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;