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

ビューの更新を管理していますが、アニメーションを時々処理したいので、必要なときにのみ一時停止を解除したいと考えていますsetNeedsDisplayGLKViewControllerコントローラーを一時停止状態で起動する方法はありますか?

4

4 に答える 4

2

viewDidLoadメソッドの代わりにviewDidAppearメソッドで一時停止してみましたか?次のようになります。

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

ブーム、完了!これが機能する場合は、起動時に一時停止するために、「if」チェックを1分間に数千回保存します。

于 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最初に設定し、次に update メソッドでチェックif(preferredFramesPerSecond == 1)して設定します.paused = YES(また、実際に必要な値を に設定しますpreferredFramesPerSecond)。その後、更新メソッドの残りを初期化後に 1 回実行するか、まだ実行したくない場合はすぐに戻ることができます。

次に、必要に応じて手動で再描画をトリガーしsetNeedsDisplay、アニメーション化する必要があるときに一時停止を解除します。

誰かがより良い解決策を持っている場合は、いつものように答えてください。

于 2012-10-25T11:34:16.350 に答える
1

NOresumeOnDidBecomeActiveを返すようにオーバーライドしようとしましたか? これにより、最初のアクティベーションを含め、アクティベーション時にアニメーションが一時停止されたままになります。

于 2013-05-12T08:28:57.677 に答える