Как создать CGPoint-Array из UIBezierPath (чтобы прикоснуться к объекту по заданному пути)

У меня есть UIBezierPath (изогнутый как '8', с только 4 точками в нем), и мне нужно сделать из него какой-нибудь массив CGPoint-Array. Есть идеи? спасибо!

редактировать:

У меня есть такой Безье

-(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)];
}

и я оживляю объект на нем

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

Я хочу анимировать объект на пути пиксель за пикселем (через позицию касания). Я хочу, чтобы объект "привязал" заданную координату касания к ближайшей точке кривой, чтобы он скользил по объекту вдоль траектории.

2 ответа

Использовать CGPathApply() функция для перебора всех элементов в пути. В качестве одного из аргументов вы должны указать указатель на функцию, которая затем будет вызываться для каждого элемента пути. Структура данных элемента пути (типа CGPathElement) затем содержит точку (ы), которые описывают это.

использование NSValue в качестве оболочки, чтобы добавить точки к NSMutableArray,

Ни UIBezierPath ни CGPath предоставить способ оценки точек на произвольном пути Безье или способ найти ближайшую точку на пути. Вам придется написать этот код самостоятельно.

К счастью, это очень хорошо изученная тема. Этот урок содержит много полезной информации, с чего можно начать. Вы заинтересованы в кривых Безье "кубического" или "третьего порядка".

Другие вопросы по тегам