iOSでは、サイズが縮小され、フェードアウトして消えていく間に円弧で画面全体を飛んでいくエフェクトを作成しようとしています。私はCAAnimationGroupでこれらの3つの効果を達成しました。問題は、アニメーションが終了し、ビューが元の位置に戻って表示され、フルサイズと完全な不透明度が表示される場合です。私は以下のコードで間違って何をしているのか誰にでも見えますか? アニメーションを元の位置に戻すべきではありませんが、最後にはアニメーションが消えます。完了時にCAAnimationGroupが元の位置に戻ります。
UIBezierPath *movePath = [UIBezierPath bezierPath];
CGPoint libraryIconCenter = CGPointMake(610, 40);
CGPoint ctlPoint = CGPointMake(self.imgViewCropped.center.x, 22.0);
movePath moveToPoint:self.imgViewCropped.center];
[movePath addQuadCurveToPoint:libraryIconCenter
controlPoint:ctlPoint];
CAKeyframeAnimation *moveAnim = [CAKeyframeAnimation animationWithKeyPath:@"position"];
moveAnim.path = movePath.CGPath;
moveAnim.removedOnCompletion = NO;
CABasicAnimation *scaleAnim = [CABasicAnimation animationWithKeyPath:@"transform"];
scaleAnim.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];
scaleAnim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)];
scaleAnim.removedOnCompletion = NO;
CABasicAnimation *opacityAnim = [CABasicAnimation animationWithKeyPath:@"alpha"];
opacityAnim.fromValue = [NSNumber numberWithFloat:1.0];
opacityAnim.toValue = [NSNumber numberWithFloat:0.0];
opacityAnim.removedOnCompletion = NO;
CAAnimationGroup *animGroup = [CAAnimationGroup animation];
animGroup.animations = [NSArray arrayWithObjects:moveAnim,scaleAnim,opacityAnim, nil];
animGroup.duration = 0.6;
animGroup.delegate = self;
animGroup.removedOnCompletion = NO;
[self.imgViewCropped.layer addAnimation:animGroup forKey:nil];
私は提案したようにfillModeを設定しましたが、UIImageViewは、アニメーションが終了すると元の位置に戻ります。アニメーションブロックの後に 'self.imgViewCropped.layer.frame = CGRectMake(610、-40、40、40);'を追加しましたが、アニメーションを実行する前に直ちに有効になります。 – Paul
実際に私のコードはこのチュートリアルに基づいています... [リンク] http://nachbaur.com/blog/core-animation-part-3しかし、これは元の画像にbaxckが再表示されるという同じ問題を抱えていますアニメーションが終了するときの位置。 – Paul
@Paul:代わりに 'self.imgViewCropped.layer.position'を設定しようとしましたか?そして、間違いなくそこにまっすぐに飛び乗るべきではありません。あなたのアニメーションはフルパスを指定しているので、現在の値から引き出すのではなく、アニメーションの位置の値は、レイヤーが使用しようとしているものを上書きします。 –