视图动画有时会在零时间内执行

时间:2018-04-14 06:55:04

标签: ios swift ios11

有时动画执行没有动画效果(零时间)。 在下面的代码中,有时代码打印"时间= 0.0000002"

let date = Date()
UIView.animate(withDuration: 0.2, animations: {

}) { (finish) in
    print("Time = \(Date().timeIntervalSince(date))")
}

1 个答案:

答案 0 :(得分:0)

这是因为你没有动画animations块内的任何内容,所以这是正常的行为。您可以使用以下代码验证

 let date = Date()
 self.view.layer.opacity = 0.5
 UIView.animate(withDuration: 2.0, animations:            
    self.view.layer.opacity = 1.0
 }) { (finish) in
      print("Time = \(Date().timeIntervalSince(date))")
 }

animations块的目的是在给定时间内对属性的起始值和结束值差异进行动画处理。一旦属性值达到animations块中的给定值,它将立即调用finish块。

如果你没有任何动画效果,只想在几秒钟之后再回调一次,可以使用TimerDispatchQueue,例如,

Timer(timeInterval: 0.2, repeats: false) { timer in
    // Do whatever you want
}

DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
   // Do whatever you want
}