我正在Xcode 9.4.1上运行swift 4。我的程序使用UITapGestureRecognizer进行单次点击,代码如下:
let screenTapOnce = UITapGestureRecognizer(target: self, action: #selector(singleTapGesture))
screenTapOnce.numberOfTapsRequired = 1
view.addGestureRecognizer(screenTapOnce)
singletap函数是:
@objc func singleTapGesture(_ gestureRecognizer: UITapGestureRecognizer) {
此功能具有很多代码,因为它是与游戏进行交互的主要方式。我的问题是,此功能对UIView所做的任何更改(即使启动简单的活动指示器)也不会显示,直到singleTapGesture函数完成之后。这是一个问题,因为我想在特殊的屏幕更新过程中显示一些进度,该过程需要2秒才能计算出来。
任何帮助您了解如何强制执行UIView更新,甚至了解为什么UITapGestureRecognizer似乎阻止任何更新的帮助都将受到赞赏。
答案 0 :(得分:1)
我的问题是,直到singleTapGesture函数完成后,此函数对UIView所做的任何更改(即使启动简单的活动指示器)也不会显示。
这就是iOS的工作方式。绘制在CATransaction提交上进行,该提交从您的代码 all 完成运行开始。
这是一个问题,因为我想在特殊的屏幕更新过程中显示一些进度,该过程需要2秒钟来计算
然后,您需要离开主线程并进入后台线程。如果您花两秒钟来计算主线程上的某些内容,则Watchdog进程将在用户不知情之前杀死您的应用程序。在进行耗时的工作(在后台线程上)时,有多种直接方法可以显示进度指示(在主线程上)。