Pro*_*ber 14 opengl-es uikit ios cadisplaylink caeagllayer
我有一个CAEAGLLayer支持的视图,它位于UIScrollView中.当我开始滚动时,调用openGL视图的-draw方法的CADisplayLink停止被调用.
我确认滚动时不会调用我的runloop启动/停止方法.一旦滚动开始,-draw方法就不会被调用,并且一旦滚动结束就恢复调用.
滚动开始后,UIKit是否会停止触发CADisplayLink?
显示链接被添加到运行循环中,如下所示:
[dl addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
Run Code Online (Sandbox Code Playgroud)
也许这个运行循环模式和UIScrollView存在冲突?是否存在其他运行循环模式或替代解决方案,即使在UIScrollView滚动时也能保持CADisplayLink触发?
我认为在任何应用程序中都不只有一个CADisplayLink.那是错的吗?
ric*_*ter 30
NSDefaultRunLoopMode滚动时你不在UIScrollView; 你在UITrackingRunLoopMode.因此,只为前者安排的任何计时器都不会在后者中触发.您可以CADisplayLink通过addToRunLoop:forMode:重复调用将其添加到多个运行循环模式,或者调用一次NSRunLoopCommonModes,这将涵盖两种模式.
他们详细讨论了这个问题,以及在第123届会议的WWDC 2012中将滚动视图与GL集成的其他问题:"使用滚动视图增强用户体验"; 我建议观看视频,因为那里有很多其他东西可能与你的情况有关.
(2016)Swift3中的一个例子......
let d = CADisplayLink(target: self, selector: #selector(ThisClassName.updateAlpha))
d.add(to: RunLoop.current, forMode: RunLoopMode.commonModes)
//and then, for example...
func updateAlpha() {
let a = leader.layer.presentation()?.value(forKey: "opacity") as! CGFloat
follower.alpha = a
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2543 次 |
| 最近记录: |