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,我想信息是在路径对象内的某个地方.但是,接口UIBezierPath和CGPathRef接口都没有显示任何实现此目的的方法.
我尝试创建一个CAShapeLayer,设置strokeEnd并CGPathRef从图层中检索,但路径保持不变.
有没有办法(公共API)实现这一目标?
前段时间我根据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)
| 归档时间: |
|
| 查看次数: |
1043 次 |
| 最近记录: |