На какой частоте кадров пользовательский интерфейс iOS запускает анимацию?

Я пытался понять это, люди говорят, что 60fps, но нет никаких убедительных доказательств этому, насколько я могу судить?

4 ответа

Вы можете создать ссылку для отображения (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) и вышеуказанный обработчик сообщит рассчитанную скорость.

Я лично предпочитаю это инструментам, потому что я считаю, что инструменты сами по себе влияют на производительность больше, чем приведенный выше код (с инструментами частота кадров может оказаться ниже, чем на самом деле). Очевидно, что приведенный выше код также повлияет на производительность, но он скромный. Кроме того, вышеизложенное позволяет вам измерять производительность на устройстве, не подключенном к компьютеру: вы всегда должны измерять производительность на физическом устройстве, а не на симуляторе.

В ответ на вопрос, касающийся достигнутой частоты кадров, вышеприведенное проиллюстрирует, что в простых анимациях обычно достигается частота кадров 60 кадров в секунду, но чем сложнее / многочисленнее анимация, тем ниже будет достигнутая частота.

Используйте инструменты, чтобы узнать себя, так как это будет зависеть от приложения.

Нашел это здесь: http://answers.unity3d.com/questions/32841/is-it-possible-to-get-above-30-fps-on-an-ios-devic.html

Да - когда вы компилируете в xcode, посмотрите в AppController.mm- там есть переменная kFPS.

Установите это, скажем, 60.

Это хорошая практика, я думаю, чтобы установить его как можно выше, чтобы у вас было место, чтобы опустить крышку.

После этого имейте в виду, что игры на 60 кадров в секунду едят батарейки на завтрак:)

Как насчет настройки функции вывода в контроллере вида?:

 spriteView.showsFPS = YES;

Мы подразумеваем, что выходное значение не является надежным?

Другие вопросы по тегам