首页 > 解决方案 > 如何等到 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")
}

如何将父方法设置为等到转换完成后再执行其余功能?

标签: swiftxcode

解决方案


接受一个完成处理程序,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来链接这些。


推荐阅读