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 при удерживании пальца без прокрутки.