UIBezierPath指向路径的分数

Cab*_*bus 3 objective-c ios uibezierpath quartz-core

鉴于任意UIBezierPath,我正在寻找一种方法来获得该路径长度的一小部分.

例:

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

CGPoint p = [path pointAtFraction:0.5];
Run Code Online (Sandbox Code Playgroud)

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

我知道这个简单的例子可以计算,但我正在寻找一个适合ANY的解决方案UIBezierPath(弧形,圆形反射等)

看到CAShapeLayer,基本上生活UIBezierPath和它的属性strokeEnd,我想信息是在路径对象内的某个地方.但是,接口UIBezierPathCGPathRef接口都没有显示任何实现此目的的方法.

我尝试创建一个CAShapeLayer,设置strokeEndCGPathRef从图层中检索,但路径保持不变.

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

Art*_*zak 8

前段时间我根据bezier三次曲线制作了一个旋转木马菜单.我认为此代码可以帮助您:

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));
}
Run Code Online (Sandbox Code Playgroud)

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

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