我像这样创建一个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
不时处理动画,所以我只想在需要时取消暂停。有没有办法让控制器处于暂停状态?
答案 0 :(得分:2)
你试过在viewDidAppear方法而不是viewDidLoad方法中暂停吗?看起来应该是这样的:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
// self.paused automatically set to NO in super's implementation
self.paused = YES;
}
砰的一声,完成了!如果这样做,那么你每分钟就会保存一次“if”检查,只是为了暂停发布!
答案 1 :(得分:2)
viewDidAppear方法适合我,但不是最佳。在暂停生效之前会出现几帧可见动画。使用viewWillAppear工作得更好:
- (void) viewWillAppear: (BOOL) animated
{
[ super viewDidAppear: animated ];
self.paused = YES;
}
答案 2 :(得分:1)
代替我正在使用此解决方案的任何答案:
我最初设置.preferredFramesPerSecond = 1
然后在更新方法中检查if(preferredFramesPerSecond == 1)
并设置.paused = YES
(并为preferredFramesPerSecond
设置我想要的真实值)。然后,我可以允许其余的更新方法在初始化后运行一次,或者如果我不希望它运行,则立即返回。
然后,我根据需要使用setNeedsDisplay
手动触发重绘,并在需要动画时将其取消暂停。
如果有人有更好的解决方案,请照常回答。
答案 3 :(得分:1)
您是否尝试覆盖resumeOnDidBecomeActive
以返回否?这应该会在任何激活时暂停动画,包括第一个。