【问题标题】:What does fillMode do exactly?fillMode 到底是做什么的?
【发布时间】:2010-11-13 02:18:05
【问题描述】:

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

fadeInAnimation.fillMode = kCAFillModeForwards;

我真的看不出这样做的效果。我有一个 alpha 设置为 0.0 的视图。然后我将其淡入。但是当我取消注释 abouth 行时,没有任何变化。相同的行为。我想了解这个 fillMode 的真正作用。

【问题讨论】:

    标签: iphone cocoa-touch core-animation


    【解决方案1】:

    来自CAMediaTiming protocol documentation

    确定接收者的 演示文稿被冻结或删除一次 其活动持续时间已结束。

    这决定了动画结束时会发生什么。默认情况下,它设置为 kCAFillModeRemoved,这意味着当动画完成时,动画更改被撤消。如果切换到kCAFillModeForwards,动画引起的变化会一直悬而未决。

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

    【讨论】:

    • 很好的解释!是的,我已将 removedOnCompletion 设置为 NO。这就是为什么我看不到填充模式的变化,对吧?为什么叫“fillMode”?那么在内部,无非就是在所有动画插值例程之后保留新的计算参数?
    • 如果fillMode 能完成这项工作,那么removedOnCompletion 是什么?
    • @jowie - 这可以防止整个动画在完成时被删除。 fillMode 只是将其锁定为最终状态,但如果将其设置为在完成后将其删除,则 fillMode 设置无关紧要。
    • @BradLarson - 那么为什么有removedOnCompletion 选项呢?我不知道为什么你需要两个参数来做同样的事情……
    • @unheilig removeOnCompletion 在动画运行完成时从层中移除动画。当动画运行完成时,fillMode 会从层中移除动画的效果。如果设置 removeOnCompletion=false 并保留 fillMode 设置为 remove,动画将仍然存在(虽然已停止),但效果会反转(属性将设置回原来的值)
    【解决方案2】:

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

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

    fillMode 真正使用与分组动画中的子动画相关,因此您可以指定处于所需状态的特定子动画

    【讨论】:

      猜你喜欢
      • 2015-08-06
      • 2013-09-02
      • 2014-01-02
      • 2013-10-10
      • 2017-05-08
      • 2022-01-20
      • 2012-10-17
      • 2017-06-15
      • 2011-05-20
      相关资源
      最近更新 更多