Ios 视图动画有时在零时间执行

Ios 视图动画有时在零时间执行,ios,swift,ios11,Ios,Swift,Ios11,有时动画执行时没有动画效果(零时间)。 在下面的代码中,有时代码打印“时间=0.0000002” 这是因为在animations块中没有设置任何动画,所以这是一种正常行为。您可以使用以下代码进行验证 let date = Date() self.view.layer.opacity = 0.5 UIView.animate(withDuration: 2.0, animations: self.view.layer.opacity = 1.0 }) { (

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


这是因为在
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
块的目的是在给定的时间为特性的开始值和结束值差异设置动画。一旦属性值达到
动画
块中的给定值,它将立即调用
完成

如果您没有动画,只想在几秒钟后回调,最好使用
Timer
DispatchQueue
例如

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

DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
   // Do whatever you want
}
Timer(timeInterval: 0.2, repeats: false) { timer in
    // Do whatever you want
}

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