使用UIView.animate
,我的动画开始晚了,这种意外延迟会根据持续时间而变化:
一些实验:
如果我将持续时间设置为withDuration: 10.0
且延迟为零,则动画的开始将延迟三秒钟。但是,该视图仍会在10.73秒内动画化(根据我的计时器)。
UIView.animate(withDuration: 10.0, delay: 0.0, options: [.curveLinear], animations:{
self.viewHeightConstraint.constant = 2
self.view.layoutIfNeeded()
} , completion: nil)
如果我将持续时间设置为withDuration: 60.0
,且延迟为零,则开始会延迟约17秒,但完整动画仍然只需要60秒(根据我的计时器)。
UIView.animate(withDuration: 10.0, delay: 0.0, options: [.curveLinear], animations:{
self.viewHeightConstraint.constant = 2
self.view.layoutIfNeeded()
} , completion: nil)
如果将持续时间设置为withDuration: 240.0
,则动画延迟将超过60秒!
当我尝试使用关键帧时会发生相同的延迟:
static func constraintChange (con: NSLayoutConstraint, layoutView: UIView, newVal: CGFloat, dur: Double, delay: Double) {
UIView.animateKeyframes(withDuration: dur, delay: delay, options: .calculationModeCubicPaced, animations: {
UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 1/1, animations:{
con.constant = newVal
layoutView.layoutIfNeeded()
})
},
completion: { finished in
if (!finished) { return }
})
}
我尝试过关闭动画选项并将代码包装在DispatchQueue.main.async { }
中,但似乎没有任何解决方法。