UIViews
OpenGL ES ビュー (具体的には、GLKit の を使用)に 2D 要素を表示するゲームを開発しておりGLKView
、位置を完全に同期させるのに問題があります。
親ビューのlayoutSubviews
では、世界の 3D 位置を画面に投影し、それらをUIView
ゲーム内のいくつかの「マーカー」の位置として使用しています。ゲーム全体は、ユーザーがカメラを動かしたことに応じてのみ更新され、カメラはsetNeedsLayout
移動するたびにビューを伝えます。
マーカーが 3D レンダリングとほぼ 1 フレーム同期していないように見えることを除いて、すべてが正常に機能しています。大雑把に言っているのは、 (1) 見積もりだからです! (2)潜在的なマルチスレッドの問題があるかどうか疑問に思っていGLKView
ます.特別な画面更新コールバックなどに同期しませんか?
ビューのlayoutSubviewsをフックして、3dビューの更新に同期させる方法はありますか?
Update: Weirdly, calling layoutIfNeeded
immediately after setNeedsLayout
makes the problem worse! Possibly 2 or more frames out. Really don't understand that!