UIImageView の回転に CABasicAnimation を使用していますが、一時停止したアニメーションを再開できません。アニメーションは viewDidLoad メソッドで開始されます。
UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"MyImage.png"]];
self.myImage = img;
[self.view addSubview:img];
[img release];
CABasicAnimation *fullRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
fullRotation.fromValue = [NSNumber numberWithFloat:0];
fullRotation.toValue = [NSNumber numberWithFloat:((360*M_PI)/180)];
fullRotation.duration = 10;
fullRotation.repeatCount = LARGE_VAL;
[img.layer addAnimation:fullRotation forKey:@"360"];
ビューが画面に表示されたときに再開する、ノンストップで繰り返し可能なアニメーションが必要です。だから私はこの投稿を読んで(here )、レイヤーアニメーションを停止および再開するためのリンゴ(solution )を提供するソリューションを実装しました。だから、私はこれらの方法を使用しました:
-(void)pauseLayer:(CALayer*)layer{
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
layer.speed = 0.0;
layer.timeOffset = pausedTime;
}
-(void)resumeLayer:(CALayer*)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;
}
そして、これらのメソッドを viewWillAppear と viewWillDisappear に追加し、myImage プロパティのレイヤーを使用して渡します。
-(void)viewWillDisappear:(BOOL)animated{
[self pauseLayer:self.myImage.layer];
}
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self resumeLayer:self.myImage.layer];
}
ビューが画面に表示されると、画像は最初の回転を行います。しかし、UIViewController を画面に表示してから、画像を回転させてビューに戻ります。問題は、ビューが画面に表示されたときに画像の回転が再開されないことです。私はチェックしました:私の画像UIImageViewプロパティはnilではなく、viewWillDisappearとviewWillAppearの両方のメソッドが呼び出されます。しかし、アニメーションは再開されません。私は何か間違っていましたか、それとも何かを逃しましたか?