Высокая загрузка процессора задерживает перерисовку UIView (iOS) - PullRequest
0 голосов
/ 22 января 2011

Я делаю приложение для iOS с представлением OpenGL ES.Поверх 3D-вида я рисую разные графические биты с помощью Cocoa Touch.

Это работает хорошо, если частота кадров хорошая.Тем не менее, когда загрузка ЦП становится высокой (представление GLES падает до 20 кадров в секунду), создается впечатление, что следующий цикл отображения UIKit продвигается вперед.

В частности, я пытаюсь отобразить представление всплывающей подсказки, основанный на различных подклассах UIView.Когда пришло время его отобразить, я обновляю текст метки всплывающей подсказки и изменяю размер фона, затем устанавливаю скрытым значение NO для основного UIView и вызываю setNeedsDisplay и setNeedsLayout.

Когда частота кадров низкая (то есть загрузка процессора высока) следующий цикл отображения, кажется, продвигается вперед бесконечно.Но сразу же, когда загрузка ЦП снижается, представление отображается, как и ожидалось.

Можно ли каким-либо образом инициировать цикл отрисовки в UIKit между перерисовками моего 3D-движка?Есть другие идеи?

1 Ответ

0 голосов
/ 22 января 2011

На iPhone все приложения рисуют свой интерфейс и логику в одном потоке, если не указано иное.

Вы можете переместить код 3D-рисунка в другой поток:

[NSThread detachNewThreadSelector:@selector(3DRenderingMethod) toTarget:self withObject:nil]

Вот соответствующая документация: http://developer.apple.com/library/iOS/#documentation/Cocoa/Reference/Foundation/Classes/NSThread_Class/Reference/Reference.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...