如何产生CGPoint阵出UIBezierPath的(接触 - 滑动沿着给定的路径中的物体)[重复]

2019-06-25 09:17发布

这个问题已经在这里有一个答案:

  • 拖动周围的UIView形状由CGMutablePaths的 1个回答

我有一个UIBezierPath(在它弯曲成“8”,只有4个点),我需要做出某种CGPoint阵的出来。 有任何想法吗? 感谢名单!

编辑:

我有我的贝塞尔initlialized像

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

我想动画由像素上的路径像素的对象(通过触摸位置)。 我希望对象“啪”一个给定的,因此触摸滑动对象沿路径触摸到曲线上的最近点的坐标。

Answer 1:

使用CGPathApply()函数来遍历路径中的所有元素。 作为一个参数,你必须指定一个指针,然后将被调用每个路径元素的功能。 路径元素数据结构(类型的CGPathElement )然后包含描述它的点(一个或多个)。

使用NSValue作为一个包装点添加到一个NSMutableArray



Answer 2:

无论UIBezierPath也不CGPath提供了一种方法来评估沿着任意的贝塞尔曲线路径,还是有办法找到路径上的最近点的点。 你必须自己编写的代码。

幸运的是,这是一个非常充分研究的课题。 本教程有很多有用的信息,让你开始。 你感兴趣的“立方”或“三阶”贝塞尔曲线。



文章来源: How to generate CGPoint-Array out of UIBezierPath (to touch-slide object along given path) [duplicate]