Анимация по пути с 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);