动画开始延迟

时间:2019-05-04 18:02:10

标签: ios swift uiviewanimation

使用UIView.animate,我的动画开始晚了,这种意外延迟会根据持续时间而变化:

一些实验:

  1. 如果我将持续时间设置为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)
    
  2. 如果我将持续时间设置为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)
    
  3. 如果将持续时间设置为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 { }中,但似乎没有任何解决方法。

0 个答案:

没有答案