CAAnimation,抢回

mei*_*win 2 calayer caanimation ios

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

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

animation.removedOnCompletion = NO;
Run Code Online (Sandbox Code Playgroud)

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

// animating opacity
layer.opacity = newOpacityValue;
[layer addAnimation:animation forKey:@"opacity"];
Run Code Online (Sandbox Code Playgroud)

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

小智 12

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

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

通过设置这样的值

// animating opacity
layer.opacity = newOpacityValue;
[layer addAnimation:animation forKey:@"opacity"];
Run Code Online (Sandbox Code Playgroud)

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

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