UITapGestureRecognizer 在完成之前不会更新 UIView

Posted

技术标签:

【中文标题】UITapGestureRecognizer 在完成之前不会更新 UIView【英文标题】:UITapGestureRecognizer not updating UIView until completion 【发布时间】:2018-07-24 23:16:45 【问题描述】:

我在 Xcode 9.4.1 上运行 swift 4。我的程序使用 UITapGestureRecognizer 进行单击,代码如下:

    let screenTapOnce = UITapGestureRecognizer(target: self, action: #selector(singleTapGesture))
    screenTapOnce.numberOfTapsRequired = 1
    view.addGestureRecognizer(screenTapOnce)

单点功能是:

    @objc func singleTapGesture(_ gestureRecognizer: UITapGestureRecognizer) 

这个函数有很多代码,因为它是与游戏交互的主要方式。我的问题是,这个函数对 UIView 所做的任何更改(即使是启动一个简单的活动指示器)在 singleTapGesture 函数完成之前都不会显示。这是一个问题,因为我想在需要 2 秒计算的特殊屏幕更新期间显示一些进度。

任何帮助理解如何强制 UIView 更新甚至理解为什么 UITapGestureRecognizer 似乎阻止任何更新将不胜感激。

【问题讨论】:

但是向我们展示代码。 【参考方案1】:

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

这就是 ios 的工作原理。绘制发生在 CATransaction 提交上,当您的代码运行完成时所有开始。

这是一个问题,因为我想在需要 2 秒计算的特殊屏幕更新期间显示一些进度

然后你需要离开主线程并进入后台线程。如果你在主线程上花两秒钟计算一些东西,看门狗进程会在用户眼前杀死你的应用程序。当您执行耗时的工作(在后台线程上)时,有一些直接的方法可以显示进度指示(在主线程上)。

【讨论】:

感谢您的解释。将函数移动到后台线程允许更新 UIView。游戏正在计算用户可以到达的所有方格。每个方块都是一个新的计算。当需要特别大的选择字段时,此更改为用户提供了很好的增量信息。我认为这解决了我的问题。我没有显示函数中的所有代码,因为它非常大。感谢您的大力帮助。

以上是关于UITapGestureRecognizer 在完成之前不会更新 UIView的主要内容,如果未能解决你的问题,请参考以下文章

UITapGestureRecognizer 不适用于 UIView 动画

使用 UITapGestureRecognizer 无法识别的选择器

UIlabel 中的 UITapGestureRecognizer 错误

UITapGestureRecognizer 的问题

带有点击事件的 UITapGestureRecognizer

UIButton 上的 UITapGestureRecognizer