为什么我的iPad触摸事件被延迟(有时长达一秒)?

时间:2011-05-21 10:20:52

标签: ios ipad touch

我正在开发一款游戏,我正在使用CAEAGLLayer支持的UIView子类来展示游戏引擎。触摸处理使用-touchesBegan:withEvent:等完成。人

一切正常,除非很少,如果快速点击其中一个屏幕控件,-touchesBegan:withEvent:不会被调用0.1到1-2秒之间的某个地方。这种情况可能发生在20次中,只有当您首先快速点击屏幕(4-5次)时才会发生这种情况。如果我还在屏幕上的另一个控件上按下另一根手指,似乎更有可能发生这种情况。

认为这与我自己的代码有关,我将UIApplication子类化,因此我可以向-sendEvent:添加日志记录语句。当发生延迟触摸时,-sendEvent:在触摸开始后的一段时间内才会被调用,因此我的UIView子类内的触摸处理代码似乎没有出错。

有没有人知道这里发生了什么(除了iOS有一些模糊的bug)?是否存在某种内部“事件队列”,使事件传递在填满时变得迟钝?还有其他人经历过这个吗?

1 个答案:

答案 0 :(得分:1)

仅在主UI运行循环中调度触摸事件,有时仅在主运行循环空闲一段时才调度。因此,如果您的应用程序忙于连续处理多个先前的触摸事件而不会中断,则主UI运行循环可能会饱和,因此在完成当前操作之前不会再获取任何触摸事件。

触摸事件也有时间戳。因此,您可以检查它们是否过快(比您的事件处理程序更快并且可以运行生成的UI更新),并且如果您希望应用程序保持最大响应,则跳过或组合一些适合您的应用程序的事件处理程序