gpt4 book ai didi

ios - 减慢 CADisplayLink 间隔

转载 作者:行者123 更新时间:2023-12-01 17:37:44 28 4
gpt4 key购买 nike

我在我的 iOS 应用程序中使用了 NSTimer,但由于 SetNeedsDisplay,我没有得到我想要的结果。

我做了一些研究并找到了 CADisplayLink,它为我提供了我想要的动画结果。遗憾的是,我无法像使用 NSTimer 那样设置计时器。

[NSTimer scheduledTimerWithTimeInterval:0.250 target:self selector:@selector(setGaugeLevel) userInfo:nil repeats:YES];

我的 CADisplayLink 调用我的函数的速度太快,我想为它提供与我使用 NSTimer 时相同的计时器(0.250 秒)。

CADisplayLink *displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(setGaugeLevel)];
[displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

setGaugeLevel 函数内部只有一个循环,其中包含一个 SetValue 函数,在每次迭代中:

[self setNeedsDisplay];

有什么方法可以降低它的速度以获得我想要的结果吗?

最佳答案

正如@carton 指出的那样,CADisplayLink 用于将您自己与显示器同步。它不是通用计时器。它专门用于实时视频等情况,您希望以与同步刷新相关的方式进行更新。这显然不是您的问题。

您描述的方法没有多大意义。调用 setNeedsDisplay 不会导致 View 立即重绘。它只是将其标记为在下一个绘图周期重新绘制。在循环中调用 setNeedsDisplay 是没有意义的。 setGaugeLevel 必须返回,否则 View 永远不会更新(因为您将挂起 UI 队列)。

如果您只是想让进度表以 0.25 秒的增量增加,则只需增加进度指示器的值并返回即可。使用 NSTimer 调用它。当它达到 100% 时,使计时器无效以使其停止。

您甚至不需要调用 setNeedsDisplay。进度指示器知道当它们的值发生变化时需要重新绘制。

关于ios - 减慢 CADisplayLink 间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34531111/

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