CADisplayLink导致touchesBegan和touchesEnded之间的延迟?

时间:2012-04-18 03:14:38

标签: ios opengl-es

我使用CADisplayLink(以20 FPS运行)来重绘我的Opengl ES场景。当我这样做时,我发现touchesBegan和touchesEnded在触摸事件之间存在巨大的延迟,差不多200毫秒或更多。

如果我关闭CADisplayLink,则滞后时间减少到50毫秒。任何人都知道如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

我假设你的CADisplayLink在主线程上运行,因为你没有另外指定。如果是这种情况,那么您可能会使用渲染操作重载主线程,从而阻止处理触摸事件(所有触摸事件都在主线程上处理)。

我遇到类似问题的解决方案是使用串行GCD队列进行OpenGL ES渲染操作,并结合调度信号量确保一次只渲染一帧以响应CADisplayLink触发。 This answer of mine详细描述了该过程,并链接到使用它的应用程序的源代码。作为附带好处,这可以在较新的多核设备上将渲染速度提高多达40%。