У меня есть EAGLView
, который я изменяю в анимации, с анимацией, управляемой NSTimer
, которая вызывает функцию рисования.Поскольку я изменяю размер EAGLView
, мне нужно настроить проекцию для вида, чтобы сохранить пропорции содержимого.Функция рисования выглядит следующим образом:
gameView.frame = newFrame;
[gameView setFramebuffer];
[self updateProjection];
/* Drawing to the EAGLView, gameView, here, then... */
[gameView presentFramebuffer];
Выполните так, однако, содержимое EAGLView выглядит как «ступенчатый» вниз по анимации.Когда я записываю его и смотрю на него кадр за кадром, становится ясно, что проекция корректируется, а затем вид очень быстро изменяется (менее одного кадра анимации).
Я подозреваю, что причиначто изменение в кадре gameView
откладывается, и тем временем обновленный кадровый буфер пробивается к экрану.Я пытался использовать CATransactions
, чтобы обновление кадра вступило в силу немедленно, но, как я и ожидал, для изменения UIView это ничего не дало.Я полагаю, что я мог бы изменить область просмотра и оставить EAGLView
полный кадр, но я беспокоюсь, что это может просто оставить меня с проблемами синхронизации в другом месте (скажем, с обновлениями любых наложенных слоев CALayers).
Кажется ли этокак разумная оценка проблемы?Как я могу предотвратить это, то есть, как я могу наилучшим образом убедиться, что представление кадрового буфера совпадает с изменением в реальном кадре EAGLView (и других элементов CA)?
Спасибо!