drawRect замедляет прокрутку в UIScrollView - PullRequest
2 голосов
/ 16 мая 2011

У меня есть UIScrollView с (пользовательским) UIView внутри него.

В моем методе scrollViewDidScroll я звоню

[myCustomView setNeedsDisplay];

Это делает прокрутку заметно медленнее, если я реализую метод drawRect: в моем пользовательском UIView - даже если он полностью пустой.

Как только я удаляю метод drawRect:, он снова становится гладким.

Понятия не имею, почему ... кто-нибудь из вас?

1 Ответ

3 голосов
/ 28 мая 2011

я тоже ненавижу рисовать

"Это связано с тем, как аппаратно-ускоренная анимация работает в Какао.

Если у вас нет пользовательского метода drawRect, система кэширует пиксели для вашего просмотра в видеопамяти. Когда ему нужно перерисовать их, он просто перетягивает пиксели на экран.

Если у вас есть собственный метод drawRect, система вместо этого должна вызвать ваш метод drawRect для рендеринга пикселей в основной памяти, а затем скопировать эти пиксели в видеопамять, ТОТ вывести пиксели на экран для каждого кадра. В документах говорится, что следует избегать drawRect, если вы можете.

Я думаю, что основная память и видеопамять распределяются на большинстве / всех устройствах iOS, но системе еще предстоит проделать большую работу, когда вы реализуете метод drawRect для представления.

Возможно, вам лучше использовать слой OpenGL и рендерить его с помощью вызовов OpenGL, так как OpenGL взаимодействует напрямую с оборудованием дисплея. "

ссылка на эту цитату: http://www.iphonedevsdk.com/forum/iphone-sdk-development/80637-drawrect-makes-scrolling-slow-uiscrollview.html

...