无法获得贝塞尔路径上去掉穗(Unable to get rid of spike on bezier

2019-10-20 15:13发布

我画一些简单的贝塞尔路径,但是我发现它不可能消除所创建的尖峰时线段之间的角度是小的:

(注:圈子是由一个独立的绘图操作,但我想,以确保该行不秒杀过去的圈子......)。

我已经试过各种lineCapStyle和lineJoinStyle的变化,但似乎没有任何工作。 除了什么如下所示我一直在使用尖角与“setMiterLimit”加入尝试。

这里是我的画线剪断的代码:

CAShapeLayer *myShapeLayer=[CAShapeLayer layer];
UIBezierPath *myPath=[UIBezierPath bezierPath];
[myPath moveToPoint:tmpPoint];
[myPath addLineToPoint:tmpPoint];         
[myPath setLineCapStyle:kCGLineCapRound];
[myPath setLineJoinStyle:kCGLineJoinRound];

myShapeLayer.path=[myPath CGPath];
myShapeLayer.strokeColor = [[UIColor yellowColor] CGColor];
myShapeLayer.fillColor = [[UIColor clearColor] CGColor];
myShapeLayer.lineWidth = 3.0;

以防万一 - 这里是我用过的米特代码,改变价值ROM 0.0至100.0 - 所有没有影响:

[myPath setLineCapStyle:kCGLineCapRound];
[myPath setLineJoinStyle:kCGLineJoinMiter];
[myPath setMiterLimit:1.0];

Answer 1:

您应该设置lineJoin形状层,而不是路径:

myShapeLayer.lineJoin = kCALineJoinRound;

这种混乱来自于一个事实,即UIBezierPath有绘制的路径(通过调用能力fillstroke的路径)。 线的配置的连接和线帽上的路径仅影响该图。

然而,由于使用的是CAShapeLayer绘制路径,两个线路的配置的连接和线帽应的形状层上完成。



文章来源: Unable to get rid of spike on bezier path