ios - 在动画完成后需要返回的函数中嵌入 UIView 动画

标签 ios animation uiview

这听起来很简单,但我一直没弄明白。

上下文:VC 告诉 View 为自身设置动画,然后 VC 等待动画完成。

我想过做这样的事情:

在 View Controller 中:

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.
    })
}

我不想将其余代码包含在完成 block 中。其余代码在 VC 中。

我怀疑所有这些都应该通过添加到动画函数中的额外完成处理程序来完成。

PS:以防万一您知道更好的解决方案/最佳实践,这里有更多上下文:我显示加载动画并在从网络检索数据后将其删除。我总是想等动画完成再删除,即使网络数据已经下载了。不想在一半时停止动画。

最佳答案

一旦异步任务完成,您就无法从函数返回。 (好吧,这可能是可能的,但这是一个非常糟糕的想法。您必须阻塞主线程等待异步函数完成,这会卡住您的 UI 并导致系统跳板如果花费的时间太长,将终止您的应用程序。)

您需要编写函数来获取完成 block 并在动画完成后调用它。像这样:

animate( completion: (Bool) -> Void) {
    UIView.animate(withDuration: 1.0, animations: {
        self.imageViewCenterYConstraint.constant -= 20
        self.layoutIfNeeded()
    }, completion {
        completion(true)
    })
}

(我认为这是对的,但我仍然没有完美的闭包语法,因此可能需要调整。)

关于ios - 在动画完成后需要返回的函数中嵌入 UIView 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43836829/

相关文章:

java - 使用 JApplet 创建动画

jquery - 通知我按钮的 UI 交互

ios - 加载仅在按钮功能后显示的动画(Swift)

ios - 检查 UICollectionViewCell 是否已创建以避免重用

ios - 多维数组对成员的模糊引用

ios - 动画 UIImageView 逐行出现在屏幕上

objective-c - 如何调整 UIView 的大小并强制其 subview 调整大小

ios - 如何在缩放的 UIView subview 上计算正确的 CGRect 原点?

ios - 模态演示 iOS 11

ios - 使用 SpriteKit 在随机位置复制 Sprite