gpt4 book ai didi

ios - 为什么 UIScrollView 会暂停我的 CADisplayLink?

转载 作者:技术小花猫 更新时间:2023-10-29 10:21:13 26 4
gpt4 key购买 nike

我有一个由 CAEAGLLayer 支持的 View ,它位于 UIScrollView 中。当我开始滚动时,调用 openGL View 的 -draw 方法的 CADisplayLink 停止调用。

我确认我的 runloop 启动/停止方法在滚动时不会被调用。 -draw 方法不会在滚动开始时立即调用,而是在滚动结束后立即恢复调用。

UIKit 是否会在滚动开始时立即阻止 CADisplayLink 触发?

显示链接是这样添加到run loop中的:

[dl addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

可能是这个run loop模式和UIScrollView有冲突?即使在 UIScrollView 滚动时,是否还有其他运行循环模式或替代解决方案来保持 CADisplayLink 触发?

我认为在任何应用程序中可以有不止一个 CADisplayLink。错了吗?

最佳答案

在滚动 UIScrollView 时,您不在 NSDefaultRunLoopMode 中;你在 UITrackingRunLoopMode。所以任何只为前者安排的计时器都不会在后者触发。您可以通过重复调用 addToRunLoop:forMode: 将您的 CADisplayLink 添加到多个运行循环模式,或者使用涵盖两种模式的 NSRunLoopCommonModes 调用一次.

他们在 WWDC 2012 的第 223 场 session 上详细讨论了这一点,以及将 ScrollView 与 GL 集成的其他问题:“使用 ScrollView 增强用户体验”;我建议观看 video ,因为其中还有很多其他内容可能与您的情况相关。


(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
}

关于ios - 为什么 UIScrollView 会暂停我的 CADisplayLink?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12622800/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com