UIScrollView断开和停止滚动与OpenGL呈现(相关CADisplayLink,NSRunLoop)

解决scheme注意,不是一个问题。

UIScrollView通过阻止在CADisplayLink注册到NSDefaultRunLoopMode时触发CADisplayLink暂停OpenGL渲染。

但是,如果您使用NSRunLoopCommonModes来解决这个问题, UIScrollView将停止滚动滚动。 一旦停止,它不会再滚动。 (破碎)

并且在其他线程/ runloop中注册CADisplayLink(正如在这个问题的回答中描述的那样: 当UIScrollView滚动时,CADisplayLink停止更新 )减less了UIScrollView的行为中断,但是不能消除。

编辑:Woops,误解您的post。 没关系

正如在这篇文章中提到的,你可以通过切换运行循环模式来解决这个问题。 在iPhone上拖动UIScrollView时,OpenGL ES视图中的animation会冻结

在苹果的WWDC2012会议223中还将介绍这一点:“通过滚动视图增强用户体验”,下半部分: https : //developer.apple.com/videos/wwdc/2012/ 。

在这里你可以find一个更好的(也是更复杂的)解决scheme:

在iPhone上拖动UIScrollView时,OpenGL ES视图中的animation会冻结

它允许你使用'NSRunLoopCommonModes',避免在没有滚动的情况下握住手指时OpenGL被冻结。

使用UITrackingRunLoopMode 。 它是专门为滚动的东西而devise的。

否则,也可以在CADisplayLink调用render&present代码,而不仅仅是在CADisplayLink的tickcallbackCADisplayLink