如果不影响动画,则立即完成

Posted

技术标签:

【中文标题】如果不影响动画,则立即完成【英文标题】: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 并不意味着不会不是动画。您需要自己检查这种情况,而不是动画。 【参考方案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 的静态值是毫无意义,因为根本没有动画

以上是关于如果不影响动画,则立即完成的主要内容,如果未能解决你的问题,请参考以下文章

UIView 动画立即完成,不考虑持续时间或延迟

回调:动画完成:在 .promise().done() 之后调用

核心动画立即调用完成函数

UITableViewCell 在插入动画完成后立即添加动画

当鼠标不再悬停在悬停动画上时,悬停动画会立即停止吗?

调整全局动画时长引起的问题