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

Решение, не вопрос.

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

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

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

Ответ 1

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

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

Ответ 3

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