Ответ 1
Используйте UITrackingRunLoopMode
. Он специально предназначен для прокрутки.
В противном случае вызовите визуализацию и введите код в -scrollViewDidScroll
тоже, а не только в CADisplayLink
тик-обратном вызове.
Решение, не вопрос.
UIScrollView
приостанавливает рендеринг OpenGL, предотвращая включение CADisplayLink
тика, когда CADisplayLink
зарегистрировано с помощью NSDefaultRunLoopMode
.
Но если вы используете NSRunLoopCommonModes
для решения этой проблемы, UIScrollView
остановит прокрутку при прокрутке пакета. И после того, как он остановился, он снова не прокручивается. (Пунктирная)
И регистрируя CADisplayLink в другом потоке /runloop (как описано в ответе на этот вопрос: CADisplayLink перестает обновляться, когда прокручивается UIScrollView) снижает нарушение поведения UIScrollView, но не может устранить.
Используйте UITrackingRunLoopMode
. Он специально предназначен для прокрутки.
В противном случае вызовите визуализацию и введите код в -scrollViewDidScroll
тоже, а не только в CADisplayLink
тик-обратном вызове.
Изменить: Woops, неправильно прочитайте сообщение. Nevermind
Как упоминалось в этом сообщении, вы можете решить эту проблему, переключив режимы цикла запуска. Анимация в представлении OpenGL ES зависает, когда UIScrollView перетаскивается на iPhone
Это также объясняется прогулкой в Apple WWDC 2012, сессия 223: "Улучшение пользовательского интерфейса с просмотром прокрутки", вторая половина: https://developer.apple.com/videos/wwdc/2012/.
Здесь вы можете найти лучшее (и более сложное) решение:
Анимация в OpenGL ES view зависает, когда UIScrollView перетаскивается на iPhone
который позволяет вам использовать "NSRunLoopCommonModes" и избегает замораживания OpenGL при удерживании пальца без прокрутки.