在动画完成后需要返回的func中嵌入UIView动画

时间:2017-05-07 21:18:57

标签: ios animation uiview

这听起来很简单,但我无法弄清楚。

上下文: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:如果你知道一个更好的解决方案/最佳实践,这里有更多的上下文:我显示一个加载动画,并在我从网络中检索数据后将其删除。我总是希望在删除之前等待动画完成,即使已经下载了网络数据。不想停止动画的一半。

1 个答案:

答案 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


}