CAAnimation,抢回

时间:2012-02-17 15:44:31

标签: ios calayer caanimation

我正在尝试使用CAAnimation,就像许多新人一样做CAAnimation;完成后,图层将恢复为原始状态。

关于如何解决这个问题的问题在这里问过几次,答案是将以下代码添加到您的CAAnimation中。

animation.removedOnCompletion = NO;

虽然这有效,但根据Apple的WWDC视频讨论CAAnimation,推荐的解决方案是:

// animating opacity
layer.opacity = newOpacityValue;
[layer addAnimation:animation forKey:@"opacity"];

所以我很想知道这两者之间的主要区别是什么?何时使用它们?

2 个答案:

答案 0 :(得分:12)

显式动画实际上并不会修改CALayer的属性。

他们只是修改presentationLayer,这是你实际看到的。动画结束后,您将看到CALayer与动画之前完全相同。

通过设置这样的值

// animating opacity
layer.opacity = newOpacityValue;
[layer addAnimation:animation forKey:@"opacity"];

确保动画值存储在模型中,因此即使从图层中移除动画,您的更改也会继续存在。

使用removedOnCompletion = YES不是持久解决方案。每当您从图层中删除动画时,它将恢复为旧状态。

答案 1 :(得分:4)

您不需要“removedOnCompletion”标志。

你需要的是将不透明度设置为动画的新值OUTSIDE - 作为你的第二个例子。

使用“removedOnCompletion”不会释放你的动画对象 - 如果你有很多动画就会炸掉你的记忆。

CABasicAnimation *animation=[CABasicAnimation animationWithKeyPath:@"opacity"];
animation.fromValue=[NSNumber numberWithFloat:0];
animation.toValue=[NSNumber numberWithFloat:1];

layer.opacity=1; // this line will make sure the opacity will stay 1 when the animation is completed
[layer addAnimation:animation forKey:@"opacity"];