1

まず、私の質問を読んでいただきありがとうございます。現在、CFAffineTransformを使用して複数のアニメーションを実行し、ケンズバーン効果を再現しようとしています。

達成してみてください:画像にズームしてから、画像を右にパンします。

問題:2番目のアニメーションを開始すると、画像は1番目の画像の最終製品に対してパンするのではなく、元の画像に対して相対的にパンします。これは私が達成しようとしている効果ではありません。

最初のアニメーションは、画像を拡大することです。

[UIView beginAnimations:@"zoomin" context:NULL];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:5];

CGAffineTransform zoomIn = CGAffineTransformMakeScale(5.8, 5.8);

imageView.transform = zoomIn;

[UIView commitAnimations];

2番目のアニメーションは、画像を左にパンすることです。

[UIView beginAnimations:@"panning" context:NULL];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:5];

CGAffineTransform moveRight = CGAffineTransformMakeTranslation(200, 0);

imageView.transform = moveRight;

[UIView commitAnimations];

2番目のアニメーションコードは、最初のアニメーションが終了した後にのみ呼び出されます。

4

1 に答える 1

1

CGAffineTransformMakeTranslationを使用しているため、機能しません。つまり、元の位置から開始する必要があります(アフィンは単位行列であり、ビューを変換されていない状態にします)。使用する必要があるのはCGAffineTransformTranslateです。または現在の変換)行列を最初の引数として。

だからあなたがそうするなら:

CGAffineTransform moveRight = CGAffineTransformTranslate(imageView.transform ,200, 0);

使いました

CGAffineTransform moveRight = CGAffineTransformMakeTranslation(200, 0);

これは次と同じです:

CGAffineTransform moveRight = CGAffineTransformTranslate(CGAffineTransformIdentity ,200, 0);

CGAffineTransformの謎を解く素晴らしい投稿を読むことをお勧めします

于 2011-08-28T07:51:07.370 に答える