如何从UIBezierPath中生成CGPoint数组(按给定path触摸滑动对象)
我有一个UIBezierPath(弯曲像'8',只有4点),我需要做一些CGPoint数组。 有任何想法吗? 感谢名单!
编辑:
我有我的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)]; }
和我一起animation的对象
anim = [CAKeyframeAnimation animationWithKeyPath:@"emitterPosition"]; anim.path = theBezierPath.CGPath; anim.calculationMode = kCAAnimationCubicPaced; anim.repeatCount = HUGE_VALF; anim.duration = tme;
我想要逐个像素(通过触摸位置)在path上设置对象的animation效果。 我希望对象将触摸的给定坐标“捕捉”到曲线上最近的点,以便沿着path滑动对象。
使用CGPathApply()
函数遍历path中的所有元素。 作为参数之一,你必须指定一个函数的指针,然后为每个path元素调用它。 然后path元素数据结构( CGPathElement
types)包含描述它的点。
使用NSValue
作为包装将点添加到NSMutableArray
。
UIBezierPath
和CGPath
都不能提供一种方法来评估任意Bezierpath上的点,或者findpath上最近点的方法。 你必须自己写这个代码。
幸运的是,这是一个研究得非常深入的话题。 本教程有很多有用的信息,以帮助您入门。 您对“三次”或“三阶”贝塞尔曲线感兴趣。