Пользовательское UIview свободное вращение слишком медленное - PullRequest
1 голос
/ 02 марта 2011

Программирование для iOS, у меня есть составное настраиваемое представление, состоящее из множества UIViews. Некоторые UIViews в этих композитах отвечают за рисование тени, а другие - за пользовательские оттенки. Тень и затенение необходимо перерисовывать при повороте, распознаваемом UIRotationGestureRecognizer. Однако скорость вращения далеко не удовлетворительная. Когда я прокомментировал setNeedDisplay, скорость вращения в порядке. Однако, если я вызываю setNeedDisplay, даже когда я закомментировал все во всех drawRects для теневого и теневого видов, вращение все равно значительно отстает.

Есть ли какие-либо рекомендации по ускорению?

Я могу придумать одно возможное решение: убедитесь, что системные вызовы drawRect реже во время вращения. Но я не знаю, как это сделать, и при этом я не знаю, является ли это лучшим решением. Любое предложение приветствуется. Спасибо.

1 Ответ

0 голосов
/ 13 апреля 2012

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

Посмотрите, как различные представления UIKit обрабатывают большие анимации:

  • При увеличении MapKit изображение карты масштабируется и выглядит размытым. Как только жест масштабирования останавливается, он отображает новое изображение в этом масштабе. (В этом случае изображение загружается из Интернета, но оно все еще иллюстрирует концепцию.)

  • Пример кода ZoomingPDF (см. Документы Apple для разработчиков) показывает, как масштабирование PDF-файлов отображается не в реальном времени, а после завершения масштабирования.

Надеюсь, это поможет.

...