这听起来很简单,但我无法弄清楚。
上下文:VC告诉视图自动动画,VC等待动画完成。
我想过做这样的事情:
在ViewController中:
loadingView.animate()
在LoadingView(UIView子类)中:
animate() -> Bool {
UIView.animate(withDuration: 1.0, animations: {
self.imageViewCenterYConstraint.constant -= 20
self.layoutIfNeeded()
}, completion {
return true // This line obviously doesn't work.
})
}
我不想在完成块中包含其余代码。其余的代码都在VC中。
我怀疑所有这一切都应该使用额外的完成处理程序来添加到animate func。
PS:如果你知道一个更好的解决方案/最佳实践,这里有更多的上下文:我显示一个加载动画,并在我从网络中检索数据后将其删除。我总是希望在删除之前等待动画完成,即使已经下载了网络数据。不想停止动画的一半。答案 0 :(得分:1)
对于您的问题,使用转义闭包在动画完成后返回它。 写入相同的函数,然后您的代码将如下所示。
func animate( completion: @escaping (Bool) -> Void) {
UIView.animate(withDuration: 1.0, animations: {
//Do your animation stuff here
//self.imageViewCenterYConstraint.constant -= 20
//self.layoutIfNeeded()
}, completion: {(true) in
completion(true)
})
}
您可以像这样调用此方法
animate { (isDone) in
// Animation is completed do your own stuff here
}