【问题标题】:Did we always need to retain an animation in a persistent property?我们是否总是需要在持久属性中保留动画?
【发布时间】:2020-08-05 03:32:15
【问题描述】:

目前我正在阅读 Matt Neuburg 的非常有趣的书。但我坚持这一刻:

在最简单的情况下,您只需启动动画并退后即可, 正如我之前演示的那样:

let anim = UIViewPropertyAnimator(duration: 1, curve: .linear) {
    self.v.backgroundColor = .red    
}    
 anim.startAnimation()

在那段代码中,UIViewPropertyAnimator 对象 anim 被实例化为一个局部变量,而我们不是 将其保留在永久财产中;然而动画有效,因为 动画服务器会保留它。

当我们以上述方式使用动画时,是否需要在持久属性中保留动画?如果我们不将动画保留在持久属性中,为什么动画(在其他情况下似乎)不应该工作?我想我不明白还有谁读过这本书?

【问题讨论】:

    标签: ios swift animation uiviewpropertyanimator


    【解决方案1】:

    Matt 的观点是,您不需要保留对它的引用来完成动画。他并不是说您不能保留参考资料,只是说您不必保留。

    你问:

    当我们以 [上述] 方式使用动画时,是否需要在持久属性中保留动画?

    不,您无需“保留”它即可继续制作动画。

    您可能会问为什么要保留参考:如果您想在动画开始后暂停或停止它、擦洗它或其他什么,您可以这样做。

    底线,如果您出于其他原因需要参考,可以,请保留参考。否则,只需将其设为局部变量并启动它即可。

    如果我们不将动画(在其他情况下似乎)保留在持久属性中,为什么它不应该工作?

    他不是这么说的。他说的恰恰相反,即你不必为动画继续保持强烈的引用。如果您出于其他原因需要它,请保留参考,但不仅仅是为了确保动画继续播放。

    【讨论】:

    • 非常感谢@Rob!实际上我对这句话感到困惑:“但是动画有效,因为动画服务器保留了它。”好吧,我们在某个函数中实例化为局部变量动画类,我认为已经有对动画类的强引用,为什么他使用 YET 这个词?在这种情况下ARC不为0,为什么我们需要保留动画服务器?
    • 他的全部观点是,当您启动动画时,“动画服务器”会保持对它的强引用,因此您不必这样做。他使用“yet”这个词是说“嘿,你可能认为你需要保留自己的强引用以防止它被释放,但你没有。”
    • 他写这件事,好像需要更早的人在上述情况下创建参考
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多