0

次のように、CALayer アニメーションを一時停止/再開するコードを見てきました。

【一時停止する】

CALayer *layer = object.icon.layer;
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
layer.speed = 0.0;
layer.timeOffset = pausedTime;

[再開します]

CALayer *layer = object.icon.layer;
CFTimeInterval pausedTime = [layer timeOffset];
layer.speed = 1.0;
layer.timeOffset = 0.0;
layer.beginTime = 0.0;
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
layer.beginTime = timeSincePause;

そして、これはうまく機能します。問題は、新しい ViewController が ViewController スタックにプッシュされた場合、またはアプリがバックグラウンドに入ってから戻ってきた場合、CALayer アニメーションがすぐに終了位置にスナップすることです!

効果的な一時停止/一時停止解除 UIView アニメーションを処理する良い方法は何ですか? アプリケーションを最小化して元に戻したり、アニメーションを失うことなくアクティブな ViewController を変更したりできます!

4

1 に答える 1

0

サスペンドでは、ルートレイヤーのmediaTimeを覚えて、アプリが再開したらその値を復元する必要があると思います...そうしないと、アプリがサスペンドされている間に経過した時間だけ時間がジャンプします。

于 2012-10-06T09:12:58.880 に答える