我们正在开发一个游戏,在OpenGL ES视图(具体而言,我们使用的是GLKit的GLKView
)上显示带有UIViews
的2D元素,并且在保持位置完全同步时出现问题。将UIView布局同步到OpenGL帧
在父视图的layoutSubviews
中,我们将世界上的三维位置投影到屏幕上,并将这些位置作为游戏中几个UIView
“标记”的位置。整个游戏只会响应用户移动相机而更新,并且相机会在每次移动时通知setNeedsLayout
。
Everthing的工作正常,除了标记似乎大致1帧与3d渲染不同步。我粗略地说,因为(1)这是一个估计! (2)我想知道是否有潜在的多线程问题:不是GLKView
同步到一个特殊的屏幕刷新回调或什么?
是否有某种方法挂钩视图的layoutSubviews,以便它同步到3d视图更新?
更新:古怪,setNeedsLayout
后立即调用layoutIfNeeded
使问题更糟糕!可能有2个或更多的帧。真的不明白!