使用 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);