【问题标题】:How do I create a GLKViewController that starts in a paused state?如何创建以暂停状态启动的 GLKViewController?
【发布时间】:2012-10-12 20:36:36
【问题描述】:

我像这样创建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 不时处理动画,所以我只想在需要时取消暂停它。有没有办法在暂停状态下启动控制器?

【问题讨论】:

  • 我想再次提出这个问题。 FPS 解决方法没问题,但肯定有更好的方法吗?

标签: ios glkit


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      砰,完成!如果这可行,那么您每分钟保存数千次“if”检查,以便在启动时暂停!

      【讨论】:

      • 这不起作用。在viewDidAppear 被命中之前,draw 方法被触发了几次。
      【解决方案4】:

      我正在使用这个解决方法来代替任何答案:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-21
        • 2011-11-30
        • 2012-01-22
        • 2015-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-14
        相关资源
        最近更新 更多