如果不影响动画,则立即完成
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
的静态值是毫无意义,因为根本没有动画以上是关于如果不影响动画,则立即完成的主要内容,如果未能解决你的问题,请参考以下文章
回调:动画完成:在 .promise().done() 之后调用