2012-04-18 58 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%。

相關問題