Comment puis-je animer le mouvement d'une vue ou d'une image le long d'un path courbe?

Je développe une application de commerce. Lorsque j'ajoute un article au panier, je veux créer un effet où une image de l'article suit un path courbe et se termine à l'onglet du panier.

Comment puis-je créer une animation d'une image le long d'une courbe comme celle-ci?

Pour développer ce que Nikolai a dit, la meilleure façon de gérer cela est d'utiliser Core Animation pour animer le mouvement de l'image ou de la vue le long d'un path de Bézier. Ceci est accompli en utilisant un CAKeyframeAnimation. Par exemple, j'ai utilisé le code suivant pour animer une image d'une vue dans une icône pour indiquer la sauvegarde (comme on peut le voir dans la video pour cette application ):

Tout d'abord importer le file d'en-tête QuartzCore #import <QuartzCore/QuartzCore.h>

 UIImageView *imageViewForAnimation = [[UIImageView alloc] initWithImage:imageToAnimate]; imageViewForAnimation.alpha = 1.0f; CGRect imageFrame = imageViewForAnimation.frame; //Your image frame.origin from where the animation need to get start CGPoint viewOrigin = imageViewForAnimation.frame.origin; viewOrigin.y = viewOrigin.y + imageFrame.size.height / 2.0f; viewOrigin.x = viewOrigin.x + imageFrame.size.width / 2.0f; imageViewForAnimation.frame = imageFrame; imageViewForAnimation.layer.position = viewOrigin; [self.view addSubview:imageViewForAnimation]; // Set up fade out effect CABasicAnimation *fadeOutAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"]; [fadeOutAnimation setToValue:[NSNumber numberWithFloat:0.3]]; fadeOutAnimation.fillMode = kCAFillModeForwards; fadeOutAnimation.removedOnCompletion = NO; // Set up scaling CABasicAnimation *resizeAnimation = [CABasicAnimation animationWithKeyPath:@"bounds.size"]; [resizeAnimation setToValue:[NSValue valueWithCGSize:CGSizeMake(40.0f, imageFrame.size.height * (40.0f / imageFrame.size.width))]]; resizeAnimation.fillMode = kCAFillModeForwards; resizeAnimation.removedOnCompletion = NO; // Set up path movement CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; pathAnimation.calculationMode = kCAAnimationPaced; pathAnimation.fillMode = kCAFillModeForwards; pathAnimation.removedOnCompletion = NO; //Setting Endpoint of the animation CGPoint endPoint = CGPointMake(480.0f - 30.0f, 40.0f); //to end animation in last tab use //CGPoint endPoint = CGPointMake( 320-40.0f, 480.0f); CGMutablePathRef curvedPath = CGPathCreateMutable(); CGPathMoveToPoint(curvedPath, NULL, viewOrigin.x, viewOrigin.y); CGPathAddCurveToPoint(curvedPath, NULL, endPoint.x, viewOrigin.y, endPoint.x, viewOrigin.y, endPoint.x, endPoint.y); pathAnimation.path = curvedPath; CGPathRelease(curvedPath); CAAnimationGroup *group = [CAAnimationGroup animation]; group.fillMode = kCAFillModeForwards; group.removedOnCompletion = NO; [group setAnimations:[NSArray arrayWithObjects:fadeOutAnimation, pathAnimation, resizeAnimation, nil]]; group.duration = 0.7f; group.delegate = self; [group setValue:imageViewForAnimation forKey:@"imageViewBeingAnimated"]; [imageViewForAnimation.layer addAnimation:group forKey:@"savingAnimation"]; [imageViewForAnimation release]; 

Vous pouvez animer la propriété du centre d'UIView à l'aide d'une CAKeyframeAnimation. Voir le guide de programmation CoreAnimation .