使用 CAKeyframeAnimation 沿路径动画
Animation Along a Path with CAKeyframeAnimation
我的视图中有两个图像视图并与 IBOutlet 连接:
IBOutlet UIImageView *ship; // X/Y = 130/82, W/H = 61/50
IBOutlet UIImageView *planet;// X/Y = 87/173, W/H = 147/128
我想要做的就是沿着椭圆路径(使用行星图像创建)为我的飞船图像设置动画,为此:
CAKeyframeAnimation *orbit = [CAKeyframeAnimation animation];
orbit.keyPath = @"position";
orbit.path = CFAutorelease(CGPathCreateWithEllipseInRect(planet.bounds, NULL));
orbit.duration = 4;
orbit.additive = YES;
orbit.repeatCount = HUGE_VALF;
orbit.calculationMode = kCAAnimationPaced;
orbit.rotationMode = kCAAnimationRotateAuto;
[ship.layer addAnimation:orbit forKey:@"orbit"];
代码的问题是我的飞船图像在我的星球图像之外进行动画处理,为了解决这个问题,我使用以下方法手动执行此操作:
CGRect boundingRect = CGRectMake(-100, 30, 200, 200);
orbit.path = CFAutorelease(CGPathCreateWithEllipseInRect(boundingRect, NULL));
如果我的星球在 X/Y = 130/82[=23 上,为什么还要使用 X/Y = -100/30 =]?有另一种方法可以直接通过图像进行此操作(例如 planet.layer.bounds 或 planet.frame)吗?
由于您是使用行星边界创建路径,因此路径将相对于行星位置,但由于您的飞船不在同一点,它将从其位置开始移动。
一种快速修复方法是在添加动画之前将飞船移动到行星原点
ship.center = CGPointMake(87, 173);
我的视图中有两个图像视图并与 IBOutlet 连接:
IBOutlet UIImageView *ship; // X/Y = 130/82, W/H = 61/50
IBOutlet UIImageView *planet;// X/Y = 87/173, W/H = 147/128
我想要做的就是沿着椭圆路径(使用行星图像创建)为我的飞船图像设置动画,为此:
CAKeyframeAnimation *orbit = [CAKeyframeAnimation animation];
orbit.keyPath = @"position";
orbit.path = CFAutorelease(CGPathCreateWithEllipseInRect(planet.bounds, NULL));
orbit.duration = 4;
orbit.additive = YES;
orbit.repeatCount = HUGE_VALF;
orbit.calculationMode = kCAAnimationPaced;
orbit.rotationMode = kCAAnimationRotateAuto;
[ship.layer addAnimation:orbit forKey:@"orbit"];
代码的问题是我的飞船图像在我的星球图像之外进行动画处理,为了解决这个问题,我使用以下方法手动执行此操作:
CGRect boundingRect = CGRectMake(-100, 30, 200, 200);
orbit.path = CFAutorelease(CGPathCreateWithEllipseInRect(boundingRect, NULL));
如果我的星球在 X/Y = 130/82[=23 上,为什么还要使用 X/Y = -100/30 =]?有另一种方法可以直接通过图像进行此操作(例如 planet.layer.bounds 或 planet.frame)吗?
由于您是使用行星边界创建路径,因此路径将相对于行星位置,但由于您的飞船不在同一点,它将从其位置开始移动。
一种快速修复方法是在添加动画之前将飞船移动到行星原点
ship.center = CGPointMake(87, 173);