繁体   English   中英

如何使贝塞尔曲线中的线接点平滑?

[英]How to smooth the joint of lines in bezier path?

我正在尝试使用UIBezierPath绘制长方体形状。 我的绘图代码如下:

((x,y)是我的UIView原点,(h,w)是它的大小)

UIBezierPath *bpath1 = [UIBezierPath bezierPath];
[bpath1 moveToPoint:CGPointMake(x, y + h * 0.4)];
[bpath1 addLineToPoint:CGPointMake(x, y + h)];
[bpath1 addLineToPoint:CGPointMake(x + w - (w * 0.4), y + h)];
[bpath1 addLineToPoint:CGPointMake(x + w - (w * 0.4), y + h * 0.4)];
[bpath1 closePath];


UIBezierPath *bpath2 = [UIBezierPath bezierPath];
[bpath2 moveToPoint:CGPointMake(x + w * 0.4, y)];
[bpath2 addLineToPoint:CGPointMake(x + w, y)];
[bpath2 addLineToPoint:CGPointMake(x + w - (w * 0.4), y + h * 0.4];
[bpath2 addLineToPoint:CGPointMake(x, y + h * 0.4];
[bpath2 closePath];

UIBezierPath *bpath3 = [UIBezierPath bezierPath];
[bpath3 moveToPoint:CGPointMake(x + w, y)];
[bpath3 addLineToPoint:CGPointMake(x + w, y + h - (h * 0.4))];
[bpath3 addLineToPoint:CGPointMake(x + w - (w * 0.4), y + h)];
[bpath3 addLineToPoint:CGPointMake(x + w - (w * 0.4), y + h * 0.4];
[bpath3 closePath];

我创建了3条路径,因为我希望每个路径都具有不同的alpha值。 我得到所需的输出如下:

一般输出

但是令我惊讶的是, h (高度)的值很少,我得到的形状如下:

某些<code> h </ code>值的形状奇怪

现在,出现这种形状的值的数量很少。 由于每次渲染代码都是相同的,所以我不理解贝塞尔曲线路径的这种奇怪行为。 为什么贝塞尔曲线显示这种行为,并且有什么方法可以使这些关节光滑?

看一下lineCapStylelineJoinStyle 具体来说,我认为这是因为lineJoinStyle默认为Mitre,并且将其更改为Round或更改了miterLimit

我相信这与不绘制平滑曲线的UIBezierPath具有相同的解决方案

如果您在UIView上绘图,则adam的解决方案有效。 但是,如果你在绘制CaShapeLayer (如在我的情况),那么你必须设置lineJoin你的财产shapeLayer ,而不是路径。 该解决方案进行了说明这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM