我正在开发一款游戏,我正在使用CAEAGLLayer
支持的UIView
子类来展示游戏引擎。触摸处理使用-touchesBegan:withEvent:
等完成。人
一切正常,除非很少,如果快速点击其中一个屏幕控件,-touchesBegan:withEvent:
不会被调用0.1到1-2秒之间的某个地方。这种情况可能发生在20次中,只有当您首先快速点击屏幕(4-5次)时才会发生这种情况。如果我还在屏幕上的另一个控件上按下另一根手指,似乎更有可能发生这种情况。
认为这与我自己的代码有关,我将UIApplication
子类化,因此我可以向-sendEvent:
添加日志记录语句。当发生延迟触摸时,-sendEvent:
在触摸开始后的一段时间内才会被调用,因此我的UIView
子类内的触摸处理代码似乎没有出错。
有没有人知道这里发生了什么(除了iOS有一些模糊的bug)?是否存在某种内部“事件队列”,使事件传递在填满时变得迟钝?还有其他人经历过这个吗?
答案 0 :(得分:1)
仅在主UI运行循环中调度触摸事件,有时仅在主运行循环空闲一段时才调度。因此,如果您的应用程序忙于连续处理多个先前的触摸事件而不会中断,则主UI运行循环可能会饱和,因此在完成当前操作之前不会再获取任何触摸事件。
触摸事件也有时间戳。因此,您可以检查它们是否过快(比您的事件处理程序更快并且可以运行生成的UI更新),并且如果您希望应用程序保持最大响应,则跳过或组合一些适合您的应用程序的事件处理程序