8

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の両方のメソッドが呼び出されます。しかし、アニメーションは再開されません。私は何か間違っていましたか、それとも何かを逃しましたか?

4

3 に答える 3

35

私はあなたにも同じ問題を抱えていました。たくさんのグーグルの後...私はそれに対する解決策を得ました。

あなたの場合、設定するときに次のコードを追加するだけですCABasicAnimation

fullRotation.removedOnCompletion = NO;

それでおしまい。それがあなたのために働くことを願っています。

于 2012-04-11T01:40:36.107 に答える
6

回避策、回避策、および回避策。これまでのところ、私が取り組んできた解決策は、レイヤーアニメーションを停止/再開するための提案された解決策を捨てることです:)、viewWillDisappearのすべてのアニメーションを削除します:

[self.myImage.layer removeAllAnimations];  

次に、viewWillAppear で新しいアニメーションを開始します。古いものを再開しているわけではないことはわかっていますが、私の場合、人間の目にはあまり見えないので、うまくいくと思います。しかし、アップルが提供する解決策が機能している場合は、共有してください。

于 2011-08-05T10:30:59.673 に答える
0

あなたの問題はメモリ管理だと思います。

代わりにこれを試してください:

UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"MyImage.png"]];
self.myImage = 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;
[self.myImage.layer addAnimation:fullRotation forKey:@"360"];

[self.view addSubview:self.myImage];

これが機能するかどうか教えてください。

于 2011-08-05T10:24:57.283 に答える