Мы разрабатываем игру с 2d элементами, отображаемыми с UIViews
над представлением OpenGL ES (в частности, мы используем GLKit GLKView
), и у нас возникают проблемы с сохранением позиций в синхронизации.
В родительском представлении layoutSubviews
мы проецируем на экран 3D-позиции в мире и используем их как местоположения для нескольких маркеров UIView
в игре. Вся игра обновляется только в ответ на пользователя, перемещающего камеру, и камера каждый раз нажимает на просмотр setNeedsLayout
.
Evertime работает отлично, за исключением того, что маркеры кажутся примерно одним кадром из-за синхронизации с 3D-рендерингом. Я говорю примерно потому, что (1) это оценка! и (2) Мне интересно, существует ли проблема многопоточности: не синхронизируется ли GLKView
с специальным обратным вызовом обновления экрана или что-то в этом роде?
Есть ли способ подключить представление layoutSubviews, чтобы он синхронизировался с обновлением 3D-представления?
Обновить: странно, вызов layoutIfNeeded
сразу после setNeedsLayout
делает проблему хуже! Возможно 2 или более фреймов. На самом деле не понимаю этого!