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


person LettersBa    schedule 02.01.2015    source источник


Ответы (1)


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

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

ship.center = CGPointMake(87, 173);
person Fabio Ritrovato    schedule 02.01.2015