2012-04-18 68 views
0

我使用CADisplayLink(以20 FPS运行)来重绘我的Opengl ES场景。当我这样做时,我发现touchesBegan和touchesEnd接触事件之间有一个巨大的延迟,差不多有200ms或更长时间。CADisplayLink导致touchesBegan和touchesEnded之间的延迟?

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

回答

2

我假设你的CADisplayLink正在主线程上运行,因为你没有另外指定。如果是这样的话,那么你可以用你的渲染操作重载主线程,防止你的触摸事件被处理(所有的触摸事件都在主线程中处理)。

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