“removedOnCompletion = NO”是什么意思?

14

CAAnimation提供了removedOnCompletion属性,默认值为YES。

让我们认识到以下事实:

A)核心动画只影响Presentation Tree,而不影响Model Tree。当动画完成时,您最终会看到在Model Tree中设置的任何内容。例如,您可以设置fillMode为kCAFillModeBoth,这将在动画完成后将Presentation Tree中的值与Model Tree交换。这使得您的动画不会恢复(这很可能是您想要的)。

B)我进行过实验。removedOnCompletion = NO将不会产生与kCAFillModeBoth或kCAFillModeForwards相同的效果。更准确地说:它对动画完成后结果的外观没有任何影响。无论它是否“被移除”,似乎都不会影响Presentation Tree。

要解释removedOnCompletion的真正作用,文档在这方面太薄弱了。我不明白。有人能解释一下究竟会删除什么,以及不删除的好处是什么吗?

我猜Apple指的是动画师对象本身,该对象使用-addAnimation:forKey:添加到图层中...但再次:保留它的点是什么?


关于这个的WWDC的视频很棒: https://developer.apple.com/videos/play/wwdc2017/235/ - DZoki019
4个回答

14
如果 removedOnCompletion 为YES,动画将在完成时被删除,并且根本没有任何东西可以“向前填充”。因此,如果您想使用fillMode,必须将removedOnCompletion设置为NO

1
是的,填充模式不会产生任何影响,因为我们正在移除动画,所以对象会返回到原始状态。 - Ammar Mujeeb

13

removedOnCompletion:

基本上,这个属性是用来控制当动画完成后是否从层的动作中删除该动画。

YES - 如果您只打算使用此动画一次,则无需使用委托方法在完成后从图层中删除动画。

fillMode:

该属性控制在动画完成时视觉上会发生什么,具体取决于指定的填充模式类型。


0

视图的呈现层即使停止动画,也会受到影响。当移除动画时,呈现层将恢复为视图的模型层的值,因此您将获得一个与an0相同的结果。


0

removedOnCompletion = YES 真的只是一个快捷方式。在大多数情况下,我会不建议使用它,而是设置模型值。

尽管您不使用动画,但挂在那里的动画可能会消耗能量和带宽,并且会破坏您的逻辑,因为您无法再检查 animationKeys 来轮询(如果您需要)它们是否已经完成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接