【问题标题】:move to completion instantly if no animations affected如果不影响动画,则立即完成
【发布时间】:2019-07-11 12:18:35
【问题描述】:

我正在使用 UIView.animated(withDuration:animations:completion:) 函数,有时动画块中没有影响到动画

例如:

假设我有一个view,它的frame.origin.y 已经等于0。

现在我不想制作的动画是:

UIView.animate(
    withDuration: 1,
    animations: {
        self.view.frame.origin.y = 0
    }
    completion: { completed in
        guard completed else { return }
        // do something
    }
)

完成块在 1 秒后调用,而不是立即调用。

如果动画块中没有任何动画影响而没有任何持续时间,我如何才能使完成块立即调用。

【问题讨论】:

  • 从技术上讲,我相信如果你分配给一个动画属性,即使动画对用户来说是不明显的,仍然会有一个动画,所以仅仅因为 origin.y 已经是 0 并不意味着不会不是动画。您需要自己检查这种情况,而不是动画。

标签: ios swift animation uiview duration


【解决方案1】:

这是你自己处理的事情,animations不会知道,你可以比较一下

 if self.view.frame.origin.y != someValue {
    // do animation
 }
 else {
    // run some other code
 }

【讨论】:

    【解决方案2】:

    替换

    withDuration: 1,
    

    withDuration: 0.01,
    

    (甚至更少)

    【讨论】:

    • 问题不限于 0 它适用于任何相等的值,因此当分配的 y 不等于 self.view.frame.origin.y 假设 y 的静态值是毫无意义,因为根本没有动画
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多