4

我有一个 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;

我想逐个像素地为路径上的对象设置动画(通过触摸位置)。我希望对象将给定的触摸坐标“捕捉”到曲线上最近的点,以便它沿着路径触摸滑动对象。

4

2 回答 2

7

使用该CGPathApply()函数迭代路径中的所有元素。作为参数之一,您必须指定一个指向函数的指针,然后将为每个路径元素调用该函数。路径元素数据结构(类型CGPathElement)然后包含描述它的点。

NSValue用作包装器将点添加到NSMutableArray.

于 2012-06-10T16:45:21.753 回答
4

既不UIBezierPath也不CGPath提供评估任意贝塞尔路径上的点的方法,也不提供找到路径上最近点的方法。您必须自己编写该代码。

幸运的是,这是一个经过充分研究的主题。本教程有很多有用的信息,可以帮助您入门。您对“三次”或“三阶”贝塞尔曲线感兴趣。

于 2012-06-10T19:38:42.977 回答