Вопрос по cgpoint, ios, uibezierpath, objective-c – Как создать CGPoint-Array из UIBezierPath (чтобы прикоснуться к объекту по заданному пути) [duplicate]

4

This question already has an answer here:

Drag UIView around Shape Comprised of CGMutablePaths 1 answer

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

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

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

-(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;

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

Так ты ищешь точку на безье, которая ближе всего к точке, к которой ты прикасаешься?Во Вы можете найти обсуждение этой темы. Не пропусти ту ссылку, которую дал Кори. Сначала вы должны найти точку (из исходных точек), наиболее близкую к касанию, - затем используйте левую и правую исходную точку, чтобы получить эту часть кривой, и вы скоро будете на своем пути. Rok Jarc
Боюсь, но попробую ... headkit
Если у тебя получится, напиши здесь. Rok Jarc

Ваш Ответ

2   ответа
4

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

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

Если вы ищете немного, вы сможете найти какой-нибудь код, чтобы попробовать. Это не так сложно, как кажется. Вот один пример. Kurt Revis
ai карамба! выглядит красиво, но я знаю, что я никогда не смогу пройти через эту математическую гору какой-то полезный код. но спасибо за подсказку! headkit
Я попробую - спасибо! headkit
7

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

ИспользуйтеNSValue как обертка для добавления точек кNSMutableArray.

CGPathApply () просто вернет точки, которые я использовал для создания пути. это мне не поможет ...: - headkit
Что тогда нужно, если не точки, которые вы использовали для создания пути? Ole Begemann
Я отредактировал свой вопрос, пытаясь быть более точным ... headkit

Похожие вопросы