アプリのメイン ビュー コントローラーに 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 の位置を変更する必要があるものはまったくありません。そのため、なぜこれが起こっているのか本当に混乱しています。
編集:プログラムで画像を作成しようとしましたが、同じ問題はありません。アプリの実行中にボタンを介して実行すると、一時停止と再開が正常に機能します。問題は、アプリケーションのデリゲート メソッドなどにあるようです。
誰かが間違っているのを見たら、私に知らせてください!