我们正在开发一款在 OpenGL ES 视图上显示 2d 元素的游戏UIViews
(具体来说,我们使用的是 GLKit GLKView
),并且在保持位置完全同步时遇到了问题。
在父视图中layoutSubviews
,我们将世界中的 3d 位置投影到屏幕上,并将其用作UIView
游戏中多个“标记”的位置。整个游戏只响应用户移动相机而更新,相机setNeedsLayout
每次移动时都会告诉视图。
一切正常,除了标记似乎与 3d 渲染不同步大约 1 帧。我说粗略是因为(1)这是一个估计!(2) 我想知道是否存在潜在的多线程问题:不GLKView
同步到特殊的屏幕刷新回调或其他什么?
有没有办法挂钩视图的 layoutSubviews 以便它同步到 3d 视图更新?
更新layoutIfNeeded
:奇怪的是,之后立即打电话setNeedsLayout
会使问题变得更糟!可能会输出 2 帧或更多帧。真是搞不懂啊!