gpt4 book ai didi

ios - 我可以使用 10ms drawRect 获得 60fps 吗?

转载 作者:可可西里 更新时间:2023-11-01 05:40:50 25 4
gpt4 key购买 nike

我问了一个更一般的问题,关于 CADisplayLinkdrawRect 的行为 here ,但由于这个问题还没有任何答案,我想我会问一个更具体的问题:有没有人设法让一个应用程序以 60fps 的速度运行,使用 drawRect 方法需要大约 10 毫秒执行?

在我的应用中,我配置了一个 CADisplayLink,如下所示:

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

update 方法只是在我的自定义 UIView 上调用 setNeedsDisplay(以及检查跳过的帧):

- (void)update
{
static CFTimeInterval timestamp = 0;

// check for skipped frame
CFTimeInterval newTimestamp = displayLink.timestamp;
if ((newTimestamp - timestamp) > (displayLink.duration * (displayLink.frameInterval + 0.5)))
NSLog(@"Frame skipped!");
timestamp = newTimestamp;

[myView setNeedsDisplay];
}

一旦 drawRect 花费超过 4 或 5 毫秒,它就会开始跳帧。就我的目的而言,它最多需要 10-11 毫秒左右,但我认为给定 1/60fps = 16.7 毫秒这应该没问题。

有人做到了吗?我做错了什么?

最佳答案

I just don't understand why I can't use the full 16ms between frames

除了您正在处理的一个 View 之外,屏幕刷新时还会绘制其他内容。 (例如,状态栏时钟。)此外,drawRect: 中的任何内容都不是硬件加速的。所以一些计算能力正在做其他事情(后台下载、iCloud 同步等)

使用 drawRect: 永远无法可靠地获得 60fps。您可以尝试使用缓存和 Apple 的其他一些方法来提高性能 drawing tips .您还可以使用 Core Animation 或 SceneKit 获得更好的性能,它们都经过高度优化。

关于ios - 我可以使用 10ms drawRect 获得 60fps 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27494390/

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