私のアプリには、私がbezierPathに沿ってアニメーション化したCALayerの配列があります。私がアプリケーションを閉じて再オープンすると、レイヤーはアニメーション化されず、アプリケーションを閉じる前と同じ位置に表示されません。私は2つのメソッド、pauseLayerとresumeLayerを実装しています。これは、アプリケーション内の2つのボタンでトリガーするときに機能しますが、アプリケーションを閉じた後は機能しません。コードは以下のマルチタスクから復帰した後にCAAnimationを再開する方法
- (void)pauseLayers{
for(int y=0; y<=end;y++)
{
CFTimeInterval pausedTime = [car[y] convertTime:CACurrentMediaTime() fromLayer:nil];
car[y].speed = 0.0;
car[y].timeOffset = pausedTime;
standardUserDefaults[y] = [NSUserDefaults standardUserDefaults];
if (standardUserDefaults[y]) {
[standardUserDefaults[y] setDouble:pausedTime forKey:@"pausedTime"];
[standardUserDefaults[y] synchronize];
}
NSLog(@"saving positions");
}
}
-(void)resumeLayers
{
for(int y=0; y<=end;y++)
{
standardUserDefaults[y] = [NSUserDefaults standardUserDefaults];
car[y].timeOffset = [standardUserDefaults[y] doubleForKey:@"pausedTime"];
CFTimeInterval pausedTime = [car[y] timeOffset];
car[y].speed = 1.0;
car[y].timeOffset = 0.0;
car[y].beginTime = 0.0;
CFTimeInterval timeSincePause = [car[y] convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
car[y].beginTime = timeSincePause;
}
}
アプリがバックグラウンドに入ったときにNSLogが呼び出されていますか? – MiguelB
はい。それは奇妙なことです:( –
私は、pauseLayersとresumeLayersを呼び出すアプリケーションデリゲートメソッドを表示します。 – MiguelB