iOS UI以什么帧速率运行动画?

时间:2014-08-04 12:37:43

标签: ios

我一直试图解决这个问题,人们说60fps,但据我所知,没有确凿的证据证明这一点?

4 个答案:

答案 0 :(得分:3)

您可以创建一个显示链接(CADisplayLink),在屏幕更新时将调用该链接。

创建一些属性以跟踪显示链接和变量以计算帧速率:

@property (nonatomic, strong) CADisplayLink *displayLink;
@property (nonatomic) CFTimeInterval startTime;
@property (nonatomic) NSInteger frameCount;

然后您可以使用方法来启动,停止和处理显示链接:

- (void)startDisplayLink
{
    self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(handleDisplayLink:)];
    self.startTime = CACurrentMediaTime();
    [self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
}

- (void)stopDisplayLink
{
    [self.displayLink invalidate];
    self.displayLink = nil;
}

// This handler will update a label on the screen with the frame rate once per second

- (void)handleDisplayLink:(CADisplayLink *)displayLink
{
    self.frameCount++;

    CFTimeInterval now = CACurrentMediaTime();
    CFTimeInterval elapsed = now - self.startTime;

    if (elapsed >= 1.0) {
        CGFloat frameRate = self.frameCount / elapsed;

        // either, like below, update a label that you've added to the view or just log the rate to the console

        self.frameRateLabel.text = [NSString stringWithFormat:@"%.1f", frameRate];

        self.frameCount = 0;
        self.startTime = now;
    }
}

然后只需启动显示链接(调用startDisplayLink),上述处理程序将报告计算出的费率。

我个人更喜欢这种仪器,因为我发现仪器本身对性能的影响比上面的代码更多(使用仪器,你的帧速率可能会低于实际值)。显然,上面的代码也会影响性能,但它是适度的。此外,通过以上功能,您可以测量从计算机上不受限制的设备的性能:您始终应该在物理设备而不是模拟器上测量性能。

在回答关于所实现的帧速率的问题时,上面将说明在简单的动画中,通常实现60fps的帧速率,但是动画越复杂/越多,所实现的速率将越低。

答案 1 :(得分:2)

使用Instruments查找自己,因为它取决于应用程序。

答案 2 :(得分:0)

在此处找到:http://answers.unity3d.com/questions/32841/is-it-possible-to-get-above-30-fps-on-an-ios-devic.html

是的 - 当您编译为xcode时,请查看AppController.mm-这是一个变量kFPS。

将此设置为,例如60。

我认为将它设置得很高是好的做法,所以你有空间降低上限。

此后,请注意60fps游戏早餐吃电池:)

答案 3 :(得分:-1)

如何在视图控制器中设置输出功能?:

 spriteView.showsFPS = YES;

我们是否暗示输出值不可靠?