UITapGestureRecognizer在完成之前不更新UIView

时间:2018-07-24 23:16:46

标签: ios swift uiview uitapgesturerecognizer

我正在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似乎阻止任何更新的帮助都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

  

我的问题是,直到singleTapGesture函数完成后,此函数对UIView所做的任何更改(即使启动简单的活动指示器)也不会显示。

这就是iOS的工作方式。绘制在CATransaction提交上进行,该提交从您的代码 all 完成运行开始。

  

这是一个问题,因为我想在特殊的屏幕更新过程中显示一些进度,该过程需要2秒钟来计算

然后,您需要离开主线程并进入后台线程。如果您花两秒钟来计算主线程上的某些内容,则Watchdog进程将在用户不知情之前杀死您的应用程序。在进行耗时的工作(在后台线程上)时,有多种直接方法可以显示进度指示(在主线程上)。