Animar una vista a lo largo de un arco

Deseo animar una vista a lo largo de un arco como se muestra en la imagen desde la posición 1 a la posición 2.

Lo que realmente sucede es que la animación de la vista describe un círculo completo en lugar de un arco. Mis preguntas son:

Debería estar usandoCGPathAddArc oCGPathAddArcToPoint ?Necesito usarCGPathMoveToPoint ¿Describir la ubicación inicial de la vista o no?

Cuando paso por el código, los valores CGPoints son los que espero que sean, al igual que los ángulos.

Utilizo la siguiente función para obtener CGPoints en un círculo

CGPoint pointOnCircle(CGPoint centre, float radius, float angle)
{
    float x = centre.x + radius * cosf(angle);
    float y = centre.y + radius * sinf(angle);

    return CGPointMake(x, y);
}

Estoy utilizando el siguiente código y sus variantes, pero hasta ahora no he podido descifrarlo.

CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
pathAnimation.calculationMode = kCAAnimationPaced;
pathAnimation.fillMode = kCAFillModeForwards;
pathAnimation.removedOnCompletion = NO;
pathAnimation.duration = duration;
pathAnimation.repeatCount = 1;

CGPoint viewCenter = dynamicView.objectCenter;
CGMutablePathRef arcPath = CGPathCreateMutable();
//  CGPathMoveToPoint(arcPath, NULL, viewCenter.x, viewCenter.y);

//work out the half way point
float halfwayAngle = dynamicView.angle + (0.5f * self.angleIncrement);
float fullwayAngle = dynamicView.angle + self.angleIncrement;
CGPoint halfwayPoint = pointOnCircle(self.center, self.radius, halfwayAngle);
CGPoint fullwayPoint = pointOnCircle(self.center, self.radius, fullwayAngle);

CGPathAddArc(arcPath, NULL, halfwayPoint.x, halfwayPoint.y, self.radius, dynamicView.angle, fullwayAngle, clockwise);
//    CGPathAddArcToPoint(arcPath, NULL, viewCenter.x, viewCenter.y, fullwayPoint.x, fullwayPoint.y, self.radius);

pathAnimation.path = arcPath;
CGPathRelease(arcPath);

[dynamicView.layer addAnimation:pathAnimation forKey:@"arc"];

Respuestas a la pregunta(2)

Su respuesta a la pregunta