swift - 如何等到 UIView 转换结束
问题描述
这与我之前的问题有关。
我有以下方法可以移动扑克牌。
func moveCard() -> Void{
UIView.animate(withDuration: 5.0) {
self.hhview.transform = CGAffineTransform(translationX: -160, y: 0)
} completion: { _ in
print("Move completed")
}
}
此方法由不同的父方法调用。但是其余的父方法在转换完成之前执行。例如,playerCheck continued
在 之前打印Move completed
。
func playerCheck() -> Void{
......
moveCard()
// how to wait till completion of the transition
print("playerCheck continued")
}
如何将父方法设置为等到转换完成后再执行其余功能?
解决方案
接受一个完成处理程序,moveCard
并将所有代码“之后”moveCard
放在完成处理程序中:
func moveCard(completion: () -> Void) -> Void{
UIView.animate(withDuration: 5.0) {
self.hhview.transform = CGAffineTransform(translationX: -160, y: 0)
} completion: { _ in
print("Move completed")
completion()
}
}
moveCard {
print("playerCheck continued")
}
如果您要调用另一个具有完成处理程序的方法,在完成处理程序中,可能会有很多嵌套。你可以考虑使用PromiseKit,你可以用它then
来链接这些。
推荐阅读
- postgresql - 如何在 ASP.NET Core 5 中使用 FromSqlRaw 删除记录?
- node.js - 由于 CORS 错误,React 不会调用后端(节点)
- android - 带有条件的活动回栈
- graphics - 我们如何在 Vulkan 中禁用帧限制/垂直同步
- angular - 如何为 Swagger UI 提供标题?
- hibernate - 具有两个实体之间不同的复合键的休眠连接列
- android - 如何将 android 导航 backstack 弹出到某个片段?
- java - 循环遍历 Arraylist 并显示满足 Java 条件的对象
- php - 在 TYPO3 v10 上从我的控制器保存系统类别
- google-sites - 我可以在谷歌网站内构建自己的自定义 JavaScript 应用程序吗?