UIScrollView не работает и останавливает прокрутку с рендерингом OpenGL (связанный CADisplayLink, NSRunLoop) - PullRequest
4 голосов
/ 09 ноября 2010

Примечание к решению, не вопрос.

UIScrollView приостанавливает рендеринг OpenGL, предотвращая срабатывание отметки CADisplayLink, когда CADisplayLink зарегистрирован с NSDefaultRunLoopMode.

Но, если вы используете NSRunLoopCommonModes для решения этой проблемы, UIScrollView остановит прокрутку при серийной прокрутке. И после того, как один раз остановился, он больше не прокручивается. (Пунктирная)

И регистрация CADisplayLink в другом потоке / цикле выполнения (как описано в ответе на этот вопрос: CADisplayLink прекращает обновление, когда прокручивается UIScrollView ) уменьшает нарушение поведения UIScrollView, но не может устранить.

Ответы [ 4 ]

1 голос
/ 02 мая 2013

Это также объясняется в обзоре Apple WWDC 2012, сессия 223: «Улучшение взаимодействия с пользователем с помощью прокрутки», вторая половина: https://developer.apple.com/videos/wwdc/2012/.

1 голос
/ 17 апреля 2011

Редактировать: Woops, неправильно прочитал ваш пост.Nevermind

Как уже упоминалось в этом посте, вы можете решить эту проблему, переключив режим цикла выполнения. Анимация в представлении OpenGL ES зависает при перетаскивании UIScrollView на iPhone

0 голосов
/ 14 мая 2011

Здесь вы можете найти лучшее (и более сложное) решение:

Анимация в представлении OpenGL ES останавливается при перетаскивании UIScrollView на iPhone

, что позволяет вамиспользовать 'NSRunLoopCommonModes' и избегать зависания OpenGL при удерживании пальца без прокрутки.

0 голосов
/ 09 ноября 2010

Использование UITrackingRunLoopMode.Он специально разработан для прокрутки материалов.

В противном случае, вызовите рендер и представьте код также на -scrollViewDidScroll, не только в CADisplayLink тиковом обратном вызове.

...