Объединение блоков анимации UIView и рендеринга OpenGL ES

Я разрабатываю игру для iP*и использую как UIKit, так и OpenGL ES 2.0. Элементы UIKit отображаются в представлении OpenGL и занимают значительный (произвольный)объем экранного пространства. Должен признать, что Apple проделала отличную работу и частота кадров в игре всегда составляет 60 FPS.

Чтобы прийти к такому выводу, я провел много тестов относительно производительности.:

  1. Я добавил много статических (неподвижных)UIView поверх представления OpenGL --OK!
  2. Я анимировал, используя собственный код, тот же UIViews (изменил свойство center в методе drawFrame моей игры)--ОК!.
  3. Я добавил много элементов OpenGL ES в UIViews --ОК!
  4. Я добавил много движущихся элементов OpenGL ES в UIViews --ОК!

Итак, теперь я хочу использовать Core Animation Framework для анимации элементов UIKit. Я использую

[UIView animateWithDuration:delay:options:animations:completion:]

для выполнения анимации (Я ориентируюсь на iOS 4 или новее).

Теперь проблема в том, что частота кадров имеет это странное поведение:Иногда я получаю 60 кадров в секунду с много-много элементов анимации UIKit (30 элементов мне подходит )и в некоторых других случаях частота кадров явно ниже 60 кадров в секунду даже с одиночным анимационным элементом UIKit, но я не могу измерить его с помощью инструментов! Позвольте мне объяснить больше:Когда я открываю Инструменты и отслеживаю базовую анимацию и/или драйвер OpenGL, я всегда получаю 60 кадров в секунду. Но очевидно, что это не так, я своими глазами вижу, что анимация OpenGL движется намного медленнее, чем соответствующая анимация UIKit вверху. Если я удалю элементы UIKit из представления, частота кадров вернется к норме.Аналогичная ситуация с той, которую я здесь описываю, происходит в любой игре OpenGL ES, когда пользователь меняет громкость устройства во время игры. Когда прозрачное изображение, показывающее текущий объем, начинает исчезать, и до тех пор, пока оно полностью не исчезнет, ​​частота кадров резко падает, но в инструментах (я тоже провел этот тест), он застрял на 60 кадрах в секунду!

Подводя итог:, иногда я получаю настоящие 60 кадров в секунду с блочной анимацией без взлетов и падений во время пробежки, а иногда я получаю фальшивые 60 кадров в секунду без взлетов и падений.

У вас есть решение этой проблемы? Все тесты проводились на iPad 2 и iPhone 3GS с iOS 5.1

8
задан erickson 13 April 2012 в 16:49
поделиться