CAKeyframeAnimation con curvas bezier y velocidad constante

Estoy intentando animar un gráfico a lo largo de un CGPathRef que contenga algunas curvas bezier, y me gustaría que la animation tuviera una velocidad suave y constante desde el principio hasta el final. Lo que me encuentro es que la animation está entrando y saliendo cada vez que llega a un punto key. He intentado usar diferentes configuraciones timingFunction y calculationMode pero no puedo encontrar la combinación adecuada para hacer el trabajo.

Esto es lo que tengo hasta ahora:

 -(void)animate { CAKeyframeAnimation *posAnim = [CAKeyframeAnimation animationWithKeyPath:@"position"]; posAnim.path = [self pathForAnimation]; posAnim.duration = 12.0; posAnim.calculationMode = kCAAnimationPaced; posAnim.fillMode = kCAFillModeBoth; posAnim.removedOnCompletion = NO; posAnim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; [image.layer addAnimation:posAnim forKey:@"posAnim"]; } -(CGPathRef)pathForAnimation { CGMutablePathRef path; CGPoint point; CGPoint controlPoint1; CGPoint controlPoint2; path = CGPathCreateMutable(); point = CGPointMake(209.5f, 24.5f); CGPathMoveToPoint(path, NULL, point.x, point.y); point = CGPointMake(249.5f, 64.5f); controlPoint1 = CGPointMake(232.5f, 25.5f); controlPoint2 = CGPointMake(249.5f, 37.5f); CGPathAddCurveToPoint(path, NULL, controlPoint1.x, controlPoint1.y, controlPoint2.x, controlPoint2.y, point.x, point.y); point = CGPointMake(146.5f, 301.5f); controlPoint1 = CGPointMake(249.5f, 91.5f); controlPoint2 = CGPointMake(147.5f, 258.5f); CGPathAddCurveToPoint(path, NULL, controlPoint1.x, controlPoint1.y, controlPoint2.x, controlPoint2.y, point.x, point.y); point = CGPointMake(146.5f, 458.5f); controlPoint1 = CGPointMake(145.5f, 344.5f); controlPoint2 = CGPointMake(170.5f, 418.5f); CGPathAddCurveToPoint(path, NULL, controlPoint1.x, controlPoint1.y, controlPoint2.x, controlPoint2.y, point.x, point.y); point = CGPointMake(18.5f, 530.5f); controlPoint1 = CGPointMake(122.5f, 498.5f); controlPoint2 = CGPointMake(18.5f, 530.5f); CGPathAddCurveToPoint(path, NULL, controlPoint1.x, controlPoint1.y, controlPoint2.x, controlPoint2.y, point.x, point.y); return path; } 

Por lo que vale, he intentado replace las curvas con líneas rectas (usando CGPathAddLineToPoint ) y eso me da una velocidad constante como yo quiero. Pero, por supuesto, prefiero tener las curvas si es posible.

También he intentado replace timingFunction con un array de timingFunctions , sin éxito.

¿Intentaste configurar la propiedad calculationMode de animation de fotogtwigs key en kCAAnimationCubicPaced? Esa propiedad es específica para hacer que la animation siga un ritmo constante para toda la curva.