ios - UISystemGateGestureRecognizer 和屏幕底部附近的延迟点击

标签 ios iphone uikit uigesturerecognizer uitouch

安装在 iOS 应用的顶层 UIView 上的标准 UISystemGateGateGestureRecognizers 有什么用?

我的应用包含两个 View - 一个填充屏幕的上半部分,另一个是自定义键盘并填充下半部分。我发现点击空格键并不总是有效,经过一些调查发现底部 20 像素左右的点击事件的时间与 View 的其余部分不同。对于大多数 View ,touchesBegan/Ended 之间的时间间隔约为 100 毫秒,而空格键为 1-2 毫秒。 (我的应用程序是一个模拟器,速度太快以至于无法检测到按键)。

在进一步挖掘之后,我发现应用程序的主要 UIView(即:我的主视图的 super View )安装了 2 个 UISystemGateGateGestureRecognizer。通过在 ViewDidAppear 中删除它们,屏幕底部不再受到影响。 (大概这些正在取消对我的键盘的触摸按下事件,因此时间更快)。

这些系统识别器至少存在于 iOS 5 到 7 以及 iPad 和 iPhone 上。我认为它们可能与从顶部/底部滑动有关,但此功能在删除它们后仍然有效。

所以我有一个修复程序,但我想更多地了解这里发生的事情 - 特别是通过删除它们可能会破坏什么。

最佳答案

这种延迟的接触也困扰着我。 就像前面所说的一样, 这是一个简单的修复方法:

override func viewDidAppear(_ animated: Bool) {
    let window = view.window!
    let gr0 = window.gestureRecognizers![0] as UIGestureRecognizer
    let gr1 = window.gestureRecognizers![1] as UIGestureRecognizer
    gr0.delaysTouchesBegan = false
    gr1.delaysTouchesBegan = false
}

无需删除那些手势识别器。 只需将其添加到主视图 Controller 即可。

关于ios - UISystemGateGestureRecognizer 和屏幕底部附近的延迟点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19799961/

相关文章:

iphone - 加载 NIB 时应用程序崩溃 - 但只有在固件升级到 iOS 5 之后

iphone - 使用标准刷新按钮

iphone - UICollectionView insertItem -> 调整动画时间?

swift - 为什么在register方法中为tableview注册UITableViewCell时需要指定self?

cocoa-touch - 除了 @2x 之外,还有其他方法可以让 iOS 知道图形已准备好 Retina Display 吗?

ios - 从 UIWebView html 获取背景颜色?

ios - iCarousel 中的按钮不起作用

iphone - 如何解析 Objective-c 中的 Assets URL?

ios - 模棱两可的使用方法

ios - 使用 PinLayout 制作 GridView