我使用CADisplayLink(以20 FPS运行)重绘Opengl ES场景。在执行此操作时,我发现在触摸事件上touchesBegan和touchesEnded之间存在巨大的时差,将近200毫秒或更长时间。

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

最佳答案

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

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

关于ios - CADisplayLink导致touchesBegan和touchesEnded之间存在滞后?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10202259/

10-14 20:48