0

連絡先アプリで連絡先の画像を選択すると、サムネイル画像がクールなアニメーションで所定の位置に読み込まれます。それは、イメージピッカーが閉じたときに発生します。

推測しなければならない場合、imagepickerが閉じられると、画像は、imagepickerのトリミングされた領域のサイズと位置に一致するUIIMageViewに配置されます。次に、UIImageViewが縮小されて所定の位置に配置されます。しかし、それは曲線に沿ってアニメートしているように見えます。

これは彼らがそれをした方法ですか?似たようなものをiPadアプリに実装したいのですが。その場合、ポップオーバー内の画像フレームの座標を把握する必要があります。

誰かがこれをどのように行ったかについて何か考えがありますか?私は何かに取り組んでいますか?

4

1 に答える 1

0

私はCAAnimation男ではありませんが、境界の基本的なアニメーションと組み合わせたCAKeyframeAnimationに沿ったの組み合わせだと思います。UIBezierPath私のベジエはまったく正しくありませんが、おそらく理解できるでしょう。だから、多分それは次のようなものです:

CGPoint center      = CGPointMake(self.view.frame.size.width / 2.0, self.view.frame.size.height / 2.0);
CGRect  finalRect   = CGRectMake(0.0, 0.0, 75.0, 75.0);
CGPoint finalCenter = CGPointMake(25.0, 25.0);

UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:center];
[path addCurveToPoint:finalCenter
        controlPoint1:CGPointMake(self.view.frame.size.width, 0.0) 
        controlPoint2:CGPointMake(100.0, finalCenter.y)];

UIImage *image = [UIImage imageNamed:@"YOURIMAGE.png"];
NSAssert(image, @"Error loading image");
CALayer *imageLayer = [CALayer layer];
imageLayer.contents = (id)image.CGImage;
imageLayer.bounds   = finalRect;
imageLayer.position = finalCenter;
[self.view.layer addSublayer:imageLayer];

CAKeyframeAnimation *animatePosition = [CAKeyframeAnimation animationWithKeyPath:@"position"];
animatePosition.path = [path CGPath];
animatePosition.duration = 2.0;
[imageLayer addAnimation:animatePosition forKey:@"arc"];

CABasicAnimation *animateBounds = [CABasicAnimation animationWithKeyPath:@"bounds"];
animateBounds.duration = 2.0;
animateBounds.fromValue = [NSValue valueWithCGRect:self.view.bounds];
animateBounds.toValue = [NSValue valueWithCGRect:finalRect];
[imageLayer addAnimation:animateBounds forKey:@"zoom"];
于 2012-07-09T22:36:54.150 に答える