Анимация по пути с CAKeyframeAnimation

Я имею в своем View два imageViews и связанных с 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 = -100/30, если моя планета на X / Y = 130/82? Есть еще один способ сделать это прямо по изображению (например, planet.layer.bounds или planet.frame)?

1 ответ

Решение

Поскольку вы создаете путь, используя границы планет, путь будет относительно положения планеты, но поскольку ваш корабль находится не в той же точке, он будет двигаться, начиная со своей позиции.

Один быстрый способ исправить это - переместить корабль в начало планеты, прежде чем добавлять анимацию.

ship.center = CGPointMake(87, 173);
Другие вопросы по тегам