如何创建以暂停状态启动的GLKViewController?

时间:2012-10-22 23:36:12

标签: ios glkit

我像这样创建一个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 个答案:

答案 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以返回?这应该会在任何激活时暂停动画,包括第一个。