我正在尝试使用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
(身高)的值很少,我的形状如下:
现在,这种形状出现的值的数量非常少。由于渲染代码每次都相同,我不明白bezier路径的这种奇怪行为。为什么bezier路径显示这种行为,有没有办法平滑这些关节?
答案 0 :(得分:2)
查看lineCapStyle
和lineJoinStyle
。具体来说,我认为这是因为lineJoinStyle
默认为Mitre,并将其更改为Round或更改miterLimit
。
答案 1 :(得分:0)
如果您正在使用UIView,那么adam的解决方案就可以了。但是如果你正在使用CaShapeLayer
(在我的情况下),那么你必须设置lineJoin
的{{1}}属性,而不是路径。
解释了此解决方案here。