fillMode到底做了什么?

Tha*_*nks 26 iphone cocoa-touch core-animation

文档并没有真正谈论这在技术上的作用.

fadeInAnimation.fillMode = kCAFillModeForwards;
Run Code Online (Sandbox Code Playgroud)

我真的没有看到这个的影响.我有一个alpha设置为0.0的视图.然后我淡入它.但是当我取消注释时,没有任何变化.相同的行为.我想了解这个fillMode真正做了什么.

Bra*_*son 47

CAMediaTiming协议文档:

确定接收方的演示文稿在其活动持续时间完成后是冻结还是删除.

这决定了动画结束时会发生什么.默认情况下,它设置为kCAFillModeRemoved,这意味着动画完成时动画更改将被撤消.如果将其切换为kCAFillModeForwards,动画引起的更改将会挂起.

请注意,您可能还需要将removedOnCompletion属性设置为NO以防止移除动画,这会使此设置无效.

  • @unheilig removeOnCompletion在运行完成时从图层中删除动画.fillMode在运行完成时从图层中删除动画的EFFECT.如果设置removeOnCompletion = false并将fillMode设置为remove,则动画仍然存在(虽然已停止),但效果将被反转(该属性将被设置回原始值) (10认同)
  • @BradLarson - 那么为什么要选择`removedOnCompletion`选项呢?我不确定为什么你需要两个参数基本上做同样的事情...... (8认同)

dis*_*ute 6

让我给它一个更明确的答案:
虽然在外观上将动画的fillMode属性设置为kCAFillModeForwards(或kCAFillModeBoth),同时设置removedOnCompletionNO可以在动画完成时将图层保持在最终状态,但这种使用fillMode不是设计方式.如果你有其他动画添加到相同的,实际上是有害的keyPath

(顺便说一句,保持动画最终状态的正确方法是更改​​属性值以匹配动画的最终帧.)

与分组动画中的子动画相关的fillMode 实际用途是什么,因此您可以指定所需状态的特定子动画