我正在尝试使用CAAnimation,就像许多新人一样做CAAnimation;完成后,图层将恢复为原始状态。
关于如何解决这个问题的问题在这里问过几次,答案是将以下代码添加到您的CAAnimation中。
animation.removedOnCompletion = NO;
虽然这有效,但根据Apple的WWDC视频讨论CAAnimation,推荐的解决方案是:
// animating opacity
layer.opacity = newOpacityValue;
[layer addAnimation:animation forKey:@"opacity"];
所以我很想知道这两者之间的主要区别是什么?何时使用它们?
答案 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"];