4

我创建一个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

4 回答 4

2

您是否尝试过暂停 viewDidAppear 方法而不是 viewDidLoad 方法?它应该看起来像这样:

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

轰隆隆,搞定!如果这可行,那么您每分钟保存数千次“if”检查,只是为了在启动时暂停!

于 2012-11-16T04:01:12.427 回答
2

viewDidAppear 方法对我有用,但不是最佳的。在暂停生效之前会出现几帧可见动画。使用 viewWillAppear 效果更好:

- (void) viewWillAppear: (BOOL) animated
{
  [ super viewDidAppear: animated ];
  self.paused = YES;
}
于 2013-11-02T17:04:54.300 回答
1

代替任何答案,我正在使用此解决方法:

.preferredFramesPerSecond = 1最初设置,然后在更新方法中检查if(preferredFramesPerSecond == 1)并设置.paused = YES(并且还设置了我真正想要的值preferredFramesPerSecond)。然后我可以让更新方法的其余部分在初始化后运行一次,或者如果我不希望它运行则立即返回。

然后,我根据需要手动触发重绘,setNeedsDisplay并在需要动画时取消暂停。

如果有人有更好的解决方案,请照常回答。

于 2012-10-25T11:34:16.350 回答
1

您是否尝试过覆盖resumeOnDidBecomeActive以返回NO?这应该使动画在任何激活时暂停,包括第一次。

于 2013-05-12T08:28:57.677 回答