UIScrollView не работает и останавливает прокрутку с помощью рендеринга OpenGL (связанный CADisplayLink, NSRunLoop)

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

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

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

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

4 ответа

Решение

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

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

Изменить: Woops, неправильно прочитал ваш пост. Не берите в голову

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

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

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

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

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

Другие вопросы по тегам