【发布时间】:2014-08-02 17:11:08
【问题描述】:
给定一个任意的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];
p 在这种情况下应该是 {x: 200.0, y: 300.0}。
我知道这个简单的例子可以计算出来,但我正在寻找适合任何UIBezierPath(弧线、圆角矩形等)的解决方案
看到CAShapeLayer,它基本上以UIBezierPath 为生,它的属性strokeEnd,我想信息在路径对象的某个地方。但是,UIBezierPath 和 CGPathRef 接口都没有显示任何实现此目的的方法。
我尝试创建CAShapeLayer,设置strokeEnd 并从图层中检索CGPathRef,但路径保持不变。
有没有办法(公共 API)来实现这一点?
【问题讨论】:
-
我认为没有公共 API。您正在寻找的是贝塞尔路径的“弧长参数化”。
-
嗯,是的。谢谢你的提示。我想那是高等数学......普通软件工程师(我;))是否有可能自己实现这一点,而不会失去理智? :)
-
这是相关的:stackoverflow.com/questions/12024674/get-cgpath-total-length,因为计算弧长是第一步。
-
嘿@Cabus,忘记了你在下面承诺的详细答案:)你能分享一下解决方案吗?我需要完全一样的。谢谢!
-
抱歉耽搁了。我发布了答案;)
标签: ios objective-c uibezierpath quartz-core