我怎样才能使一个视图或图像沿着弯曲的path运动?

我正在开发一个商业应用程序。 当我将商品添加到购物车时,我想创build一个效果,其中商品的图像沿着弯曲的path行进,并在购物车标签处结束。

我怎样才能创build一个像这样的曲线的图像animation?

为了扩大尼古拉所说的话,处理这个问题的最好方法是使用核心animation来使图像或视图沿着贝塞尔path的运动animation化。 这是使用CAKeyframeAnimation完成的。 例如,我已经使用下面的代码来将视图的图像设置为图标的animation,以指示保存(在此应用程序的video中可以看到):

首先导入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]; 

您可以使用CAKeyframeAnimation为UIView的中心属性设置animation。 请参阅CoreAnimation编程指南。