iOS中最早的注册触摸事件

Posted

技术标签:

【中文标题】iOS中最早的注册触摸事件【英文标题】:Earliest registration touch event in iOS 【发布时间】:2017-08-06 17:34:02 【问题描述】:

重新排列 UIView 的结构后,我似乎引入了绘图延迟(用户可以用手指在屏幕上绘图)。在开始绘图之前可以忽略不计,但现在手指的初始移动和线条的绘制之间存在明显的延迟。当我继续绘制时,延迟似乎消失了。因此,初始触摸事件可能会延迟到某个地方。

我的问题不是如何解决这个特定的实例,而是在诊断中我遇到了以下问题:我最早可以记录屏幕触摸(开始时间)的点是什么?

现在我将时间戳放在所有 UIResponder 的 hitTest 中(UIWindow -> UIView -> ... -> DrawingView)。但是在 UIWindow 中第一次调用 hitTest 之前会不会有延迟?

谢谢!

【问题讨论】:

【参考方案1】:

UIWindow 将触摸事件传递给手势识别器,然后再将事件直接传递给视图。这发生在-[UIWindow sendEvent:](https://developer.apple.com/documentation/uikit/uiwindow/1621614-sendevent) 内部。我相信它会命中测试视图层次结构以找到可能对事件感兴趣的手势识别器,因此您不应期望 hitTest:withEvent: 消息会延迟。

如果您的视图或其任何超级视图上有手势识别器,that gesture recognizer can delay the delivery of touch events。

请注意,UIKit 的许多标准视图都使用手势识别器。特别是,UIScrollView uses gesture recognizers that can delay touch events,以及UITableViewUICollectionView 都是UIScrollView 的子类。

【讨论】:

谢谢。因此,如果存在延迟触摸的视图,我可能应该寻找 hitTest 序列和 touchesBegan 之间的延迟?我还在 sendEvent 中打印了一个时间戳,但它是在 hitTest 序列之后出现的。

以上是关于iOS中最早的注册触摸事件的主要内容,如果未能解决你的问题,请参考以下文章

iOS触摸事件处理详解

iOS开发之触摸事件

iOS开发系列--触摸事件手势识别摇晃事件耳机线控

iOS开发系列--触摸事件手势识别摇晃事件耳机线控

iOS开发系列--触摸事件手势识别摇晃事件耳机线控

iOS触摸事件