Как мне создать 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
вернуть НЕТ? Это должно держать анимацию приостановленной при любой активации, включая первую.