Произвольное вращение Custom UIview слишком медленное

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

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

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


person huggie    schedule 02.03.2011    source источник


Ответы (1)


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

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

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

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

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

person bentford    schedule 13.04.2012
comment
Спасибо за ваше предложение. К сожалению, тень и штриховка имитируют 3D-объект, и их нужно перерисовывать во время вращения, иначе это выглядело бы странно. Но да, спасибо, что указали на набор карт и примеры в формате pdf. - person huggie; 20.04.2012
comment
UIKit может не работать с тем эффектом, которого вы пытаетесь достичь. - person bentford; 23.04.2012
comment
Возможно ты прав. Я думаю, что это было слишком медленно, как я. Я дам тебе правильный ответ. - person huggie; 24.04.2012