如何创建圆形虚线作为CALayer?

时间:2016-06-22 15:29:39

标签: ios objective-c calayer

我读了这篇文章Draw dotted (not dashed!) line, with IBDesignable in 2017关于绘制虚线(而不是虚线)。但是,我不太熟悉图形,我想知道如何用CALayer做这个(所以我不需要做整个获取当前图形上下文的事情)。

我试图制作一个看起来像这样的虚线(白色部分,忽略背景):

dotted line

这是我用来制作虚线的代码:

CAShapeLayer *shapelayer = [CAShapeLayer layer];
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:startPoint];
[path addLineToPoint:endPoint];
[path setLineCapStyle:kCGLineCapRound];
UIColor *fill = [UIColor whiteColor];
shapelayer.strokeStart = 0.0;
shapelayer.strokeColor = fill.CGColor;
shapelayer.lineWidth = 4.0;
shapelayer.lineJoin = kCALineJoinRound;
shapelayer.lineDashPattern = [NSArray arrayWithObjects:[NSNumber numberWithInt:4],[NSNumber numberWithInt:6 ], nil];
shapelayer.path = path.CGPath;

return shapelayer;

如何镜像我引用的SO帖子中的代码,但继续使用CALayer?

我尝试修改该帖子中的代码,如下所示:

UIBezierPath * path = [[UIBezierPath alloc] init];
[path moveToPoint:startPoint];
[path addLineToPoint:endPoint];
[path setLineWidth:8.0];
CGFloat dashes[] = { path.lineWidth, path.lineWidth * 2 };
[path setLineDash:dashes count:2 phase:0];
[path setLineCapStyle:kCGLineCapRound];
[path stroke];

CAShapeLayer *returnLayer = [CAShapeLayer layer];
returnLayer.path = path.CGPath;
return returnLayer;

然而,这最终没有任何吸引力。

2 个答案:

答案 0 :(得分:6)

我希望这会对你有所帮助。

batch_size

我已附加图片enter image description here

的输出

答案 1 :(得分:1)

在我的情况下,我必须设置lineCapStyle而不是lineJoinStyle