Cómo generar CGPoint-Array fuera de UIBezierPath (para tocar el object deslizante a lo largo de la ruta dada)

Tengo un UIBezierPath (curvado como un '8', con solo 4 puntos) y necesito hacer algún tipo de CGPoint-Array. ¿Algunas ideas? quex

editar:

Tengo mi bezier inicializado así

-(void) initBezier { theBezierPath = [UIBezierPath bezierPath]; [theBezierPath moveToPoint:P(211.00, 31.00)]; [theBezierPath addCurveToPoint:P(870.00, 191.00) controlPoint1:P(432.00, -11.00) controlPoint2:P(593.00, 209.00)]; [theBezierPath addCurveToPoint:P(731.00, 28.00) controlPoint1:P(1061.95, 178.53) controlPoint2:P(944.69, 5.78)]; [theBezierPath addCurveToPoint:P(189.00, 190.00) controlPoint1:P(529.00, 49.00) controlPoint2:P(450.00, 189.00)]; [theBezierPath addCurveToPoint:P(211.00, 31.00) controlPoint1:P(-33.01, 190.85) controlPoint2:P(71.00, 37.00)]; } 

y animo un object con él

 anim = [CAKeyframeAnimation animationWithKeyPath:@"emitterPosition"]; anim.path = theBezierPath.CGPath; anim.calculationMode = kCAAnimationCubicPaced; anim.repeatCount = HUGE_VALF; anim.duration = tme; 

Quiero animar el object en el path píxel por píxel (a través de la position táctil). Quiero que el object "encaje" una determinada coorderada de un toque al punto más cercano en la curva para que toque-desliza el object a lo largo del path.

Utilice la function CGPathApply() para iterar sobre todos los elementos de una ruta. Como uno de los arguments, debe especificar un puntero a una function que se llamará para cada elemento de ruta. La estructura de datos del elemento de ruta (del tipo CGPathElement ) contiene los puntos que lo describen.

Utilice NSValue como un contenedor para agregar los puntos a un NSMutableArray .

Ni UIBezierPath ni CGPath proporcionan una forma de evaluar los puntos a lo largo de una ruta arbitraria de Bezier, o una forma de encontrar el punto más cercano en la ruta. Deberás escribir ese código tú mismo.

Afortunadamente, este es un tema muy estudiado. Este tutorial tiene mucha información útil para comenzar. Te interesan las curvas Bezier "cúbicas" o "de tercer order".