UIBezierPath指向小path

给定一个任意的UIBezierPath ,我正在寻找一种方法来得到一个点的path长度的一小部分。

例:

 UIBezierPath *path = [UIBezierPath bezierPath]; [path moveToPoint:CGPointMake(200.0, 200.0)]; [path addLineToPoint:CGPointMake(200.0, 400.0)]; CGPoint p = [path pointAtFraction:0.5]; 

在这种情况下{x: 200.0, y: 300.0} p应该是{x: 200.0, y: 300.0}

我知道这个简单的例子可以计算,但我正在寻找一个解决scheme,适合任何UIBezierPath (圆弧,圆angularUIBezierPath等)

看到基本生活在UIBezierPath及其属性strokeEnd ,我想信息是在path对象内的某个地方。 但是, UIBezierPathCGPathRef接口都不能显示任何方式来实现这一点。

我尝试创build一个CAShapeLayer ,设置strokeEnd并从图层中检索CGPathRef ,但path保持不变。

有没有什么办法(公共API)来实现这一目标?

前段时间我做了一个基于贝塞尔三次曲线的旋转木马菜单。 我认为这个代码可以帮助你:

 CGFloat bezierInterpolation(CGFloat t, CGFloat a, CGFloat b, CGFloat c, CGFloat d) { CGFloat t2 = t * t; CGFloat t3 = t2 * t; return a + (-a * 3 + t * (3 * a - a * t)) * t + (3 * b + t * (-6 * b + b * 3 * t)) * t + (c * 3 - c * 3 * t) * t2 + d * t3; } - (CGPoint)getPointForT:(CGFloat)t { return CGPointMake(bezierInterpolation(t, _p1.x, _p2.x, _p3.x, _p4.x), bezierInterpolation(t, _p1.y, _p2.y, _p3.y, _p4.y)); } 

t – 你的分数长度<0,1>

_p1,_p2,_p3,_p4 – 曲线的点(检查这个网站可以看到它有点: http : //cubic-bezier.com/#17,67,73,86,67 )

对不起,这个巨大的延迟。 我实际上在一年多前解决了这个问题,哇。
我在UIBezierPath上创build了一个UIBezierPath ,它完成了这项工作。 GitHub在这里回购

从1年前重新阅读我的代码后,我不得不说,这是我曾经用过的代码,这是相当令人震惊的:D缺乏文档是令人不安的。 如果您需要更多的信息,请让我知道,我会更新回购。