我們正在開發一個遊戲,在OpenGL ES視圖(具體而言,我們使用的是GLKit的GLKView
)上顯示帶有UIViews
的2D元素,並且在保持位置完全同步時出現問題。將UIView佈局同步到OpenGL幀
在父視圖的layoutSubviews
中,我們將世界上的三維位置投影到屏幕上,並將這些位置作爲遊戲中幾個UIView
「標記」的位置。整個遊戲只會響應用戶移動相機而更新,並且相機會在每次移動時通知setNeedsLayout
。
Everthing的工作正常,除了標記似乎大致1幀與3d渲染不同步。我粗略地說,因爲(1)這是一個估計! (2)我想知道是否有潛在的多線程問題:不是GLKView
同步到一個特殊的屏幕刷新回調或什麼?
是否有某種方法掛鉤視圖的layoutSubviews,以便它同步到3d視圖更新?
更新:古怪,setNeedsLayout
後立即調用layoutIfNeeded
使問題更糟糕!可能有2個或更多的幀。真的不明白!