我有一个UIBezierPath(曲线像'8',只有4个点),我需要制作一些CGPoint-Array。有任何想法吗?感谢名单!
编辑:
我的bezier初学者就像那样
-(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;
我想逐个像素地(通过触摸位置)为路径上的对象设置动画。我希望对象将触摸的给定坐标“捕捉”到曲线上的最近点,以便沿着路径触摸滑动对象。
答案 0 :(得分:7)
使用CGPathApply()
函数迭代路径中的所有元素。作为参数之一,您必须指定一个函数的指针,然后为每个路径元素调用该函数。然后,路径元素数据结构(类型CGPathElement
)包含描述它的点。
使用NSValue
作为包装,将点数添加到NSMutableArray
。
答案 1 :(得分:4)
UIBezierPath
和CGPath
都没有提供一种方法来评估沿任意Bezier路径的点,或者找到路径上最近点的方法。你必须自己编写代码。
幸运的是,这是一个研究得很好的话题。 This tutorial有很多有用的信息,可以帮助您入门。你对“立方”或“三阶”贝塞尔曲线感兴趣。