Sincronice el layout de UIView con frameworks OpenGL

Estamos desarrollando un juego que tiene elementos 2d desplegados con UIViews sobre una vista de OpenGL ES (específicamente, estamos usando GLKView de GLKView ) y tenemos problemas para mantener las posiciones perfectamente sincronizadas.

En las vistas de layoutSubviews la vista layoutSubviews , proyectamos las posiciones 3d en el mundo en la pantalla y las UIView como ubicaciones para varios "marcadores" de UIView en el juego. Todo el juego solo se actualiza en respuesta al usuario que mueve la camera, y la camera le dice a la vista setNeedsLayout cada vez que se mueve.

Todo está funcionando bien, excepto que los marcadores parecen estar aproximadamente 1 marco desincronizados con la representación 3D. Digo más o less porque (1) ¡es una estimación! y (2) me pregunto si hay potencialmente un problema de subprocesss GLKView : ¿no se sincroniza GLKView con una callback de actualización de pantalla especial o algo así?

¿Hay alguna forma de enlazar las vistas de layout de una vista para sincronizarlas con la actualización de la vista 3D?

Actualización : ¡Extrañamente, llamar a layoutIfNeeded inmediatamente después de setNeedsLayout empeora el problema! Posiblemente 2 o más frameworks. ¡Realmente no entiendo eso!

¿Qué está desencadenando tu llamada a LayoutSubviews?

Todo depende de dónde en el RunLoop se active su llamada frente a dónde se activa su llamada de actualización de GLK.

En general, por lo que haces, me gustaría hacer tu layout como un efecto secundario de la actualización de GLK, es decir, no esperes a las presentaciones de layout para cambiar tu position.

(si está usando OpenGL, entonces todo el sistema de "layout" no le servirá de mucho: GLK se está ejecutando en su propio pequeño mundo de velocidad de cuadro variable, y desea convertirlo en su punto de reference)

Esto es imposible de hacer correctamente sin dibujar los fotogtwigs del video usando OpenGL (dibujando en el mismo context para que esté siempre seguro de que un fotogtwig contiene el mismo time de video y animation). Todo lo demás que hagas, la compensación de fotogtwigs, la pnetworkingicción de retraso, solo depende del azar, y siempre estará un poco desincronizada.

No estoy familiarizado con UIView pero si hay alguna forma de dejar que reproduzca audio y copie los fotogtwigs a una textura, haz eso. El retraso en el audio es mucho más fácil de compensar y mucho less perceptible por los humanos que en el video.