0

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

如果我关闭 CADisplayLink,则延迟会减少到 50 毫秒。有谁知道如何解决这个问题?

4

1 回答 1

2

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

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

于 2012-04-18T18:31:10.853 回答