0

アプリのメイン ビュー コントローラーに 2 つの UIImageView があります。それらは常に UIView アニメーションを介してアニメーション化されています。私が達成したいのは、ユーザーがホームボタンをクリックして UIView アニメーションを一時停止し、ユーザーがアプリに戻ったときにアニメーションを再開することです。

したがって、一時停止するには、アプリケーション デリゲートから ViewController にメソッドを呼び出して、applicationWillResignActive 呼び出しで一時停止します。

また、再開するには、アプリケーション デリゲートから ViewController へのメソッドも呼び出して、applicationDidBecomeActive メソッドで再開します。

これは、アニメーションを一時停止または再開するために使用するコードです。

-(void)pauseLayer:(CALayer*)layer {
    CFTimeInterval paused_time = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
    layer.speed = 0.0;
    layer.timeOffset = paused_time;
}

-(void)resumeLayer:(CALayer*)layer {
    CFTimeInterval paused_time = [layer timeOffset];
    layer.speed = 1.0f;
    layer.timeOffset = 0.0f;
    layer.beginTime = 0.0f;
    CFTimeInterval time_since_pause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - paused_time;
    layer.beginTime = time_since_pause;
}

- (void)pause:(BOOL)theBool {
    if (theBool) {
        [self pauseLayer:self.myImageView.layer];
        [self pauseLayer:self.myImageViewleft.layer];
    } else {
        [self resumeLayer:self.myImageView.layer];
        [self resumeLayer:self.myImageViewleft.layer];
    }
}

したがって、すべてを NSLogged し、それに応じてメソッドが呼び出されますが、アニメーションを再開すると、画像ビューは中断した場所から再開されず、XIB に配置した位置 (画面外) にある可能性が高くなります。

アプリを再起動すると、XIB がリロードされますか? これらの UIImageView の位置を変更する必要があるものはまったくありません。そのため、なぜこれが起こっているのか本当に混乱しています。

編集:プログラムで画像を作成しようとしましたが、同じ問題はありません。アプリの実行中にボタンを介して実行すると、一時停止と再開が正常に機能します。問題は、アプリケーションのデリゲート メソッドなどにあるようです。

誰かが間違っているのを見たら、私に知らせてください!

4

1 に答える 1

2

これは非常に複雑で難しいことがわかったので、今のところは代わりに Cocos2D を使用し、CCDirector の一時停止機能を利用します。

編集: CCDirector の一時停止機能を試したところ、完全に機能しました。絶対この道で!!!

于 2012-08-27T23:59:06.273 に答える