8

おそらく単純なものが欠けていますが、画像ビューで単純な「Ken Burns Effect」を実行しようとしています。

最初のコード:

[UIView animateWithDuration:20
                      delay:2
                    options:UIViewAnimationCurveLinear
                 animations:^{
                   CGAffineTransform move = CGAffineTransformMakeTranslation(40, 40);
                   CGAffineTransform zoom    = CGAffineTransformMakeScale(1.2, 1.2);
                   CGAffineTransform transform = CGAffineTransformConcat(zoom, move);
                   self.imageView.transform = transform;
                 }
                 completion:^(BOOL finished){
                   NSLog(@"Done");
                 }];

これは通常の縮尺の画像ビューから始まり、20 秒かけて 120% のサイズに拡大されると予想していました。実際に起こることは、最初は通常のサイズよりもすぐに小さくなり、その後通常のサイズに拡大することです。

スケール値の逆数を使用すると、最初はズームインしてから通常のスケールにズームアウトしますが、これは私が望む効果とは逆です。

何か案は?

4

3 に答える 3

11

わかりました、これは実際に機能し、私が望むことを行います。

CABasicAnimation *transformAnimation = [CABasicAnimation animationWithKeyPath:@"transform"];
transformAnimation.duration = 20.0;
transformAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
transformAnimation.removedOnCompletion = NO;
transformAnimation.fillMode = kCAFillModeForwards;

CATransform3D xform = CATransform3DIdentity;
xform = CATransform3DScale(xform, 1.2, 1.2, 1.0);
xform = CATransform3DTranslate(xform, 60, -60, 0);
transformAnimation.toValue = [NSValue valueWithCATransform3D:xform];
[self.imageView.layer addAnimation:transformAnimation forKey:@"transformAnimation"];
于 2012-12-06T16:33:06.063 に答える
2

ビューは、変換の変更に応じて親ビューによって再レイアウトされているように見えます。アニメーションブロックに変換が設定されるとすぐに、変換の最終結果にスケールダウンされます。重要なのは、最初の試みがビューに直接変更を加え、2番目のアプローチがレイヤーで機能することです。

于 2012-12-14T22:38:09.617 に答える
-2

imageView の現在の変換から始めてみましたか?

[UIView animateWithDuration:20
                      delay:2
                    options:UIViewAnimationCurveLinear
                 animations:^{
                   CGAffineTransform trans = self.imageView.transform;
                   CGAffineTransformTranslate(trans, 40, 40);
                   CGAffineTransformScale(trans, 1.2, 1.2);
                   self.imageView.transform = trans;
                 }
                 completion:^(BOOL finished){
                   NSLog(@"Done");
                 }];
于 2012-12-06T00:35:43.163 に答える