Как мне создать GLKViewController, который запускается в состоянии паузы?

Я создаю GLKViewController как это:

// Create a GLK View Controller to handle animation timings
_glkVC = [[GLKViewController alloc] initWithNibName:nil bundle:nil];
_glkVC.preferredFramesPerSecond = 60;
_glkVC.view = self.glkView;
_glkVC.delegate = self;
_glkVC.paused = YES;
NSLog(@"initial state: %@", _glkVC.paused ? @"paused" : @"running");

но он немедленно начинает вызывать метод обновления делегата и вывод из NSLog выше это: initial state: running

Я управляю своими обновлениями просмотра с setNeedsDisplay но я хочу GLKViewController время от времени обрабатывать анимацию, поэтому я хочу отменить ее только при необходимости. Есть ли способ запустить контроллер в состоянии паузы?

4 ответа

Решение

Вместо любых ответов я использую этот обходной путь:

Я поставил .preferredFramesPerSecond = 1 сначала, а затем в методе обновления я проверяю if(preferredFramesPerSecond == 1) и установить .paused = YES (а также установить мое реальное желаемое значение для preferredFramesPerSecond). Затем я могу разрешить запуск остальной части метода обновления один раз после инициализации или немедленно вернуться, если я не хочу, чтобы он еще выполнялся.

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

Если у кого-то есть лучшее решение, ответьте, как обычно.

Метод viewDidAppear у меня работает, но не оптимально. Несколько кадров видимой анимации появляются до того, как пауза вступает в силу. Использование viewWillAppear работало намного лучше:

- (void) viewWillAppear: (BOOL) animated
{
  [ super viewDidAppear: animated ];
  self.paused = YES;
}

Вы пытались сделать паузу в методе viewDidAppear вместо метода viewDidLoad? Это должно выглядеть примерно так:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];    
    // self.paused automatically set to NO in super's implementation
    self.paused = YES;
}

Бум, готово! Если это работает, вы сохраняете проверку "если" тысячи раз в минуту, чтобы просто приостановить запуск!

Вы пытались переопределить resumeOnDidBecomeActive вернуть НЕТ? Это должно держать анимацию приостановленной при любой активации, включая первую.

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