【问题标题】:How to create a circular dotted line as a CALayer?如何创建圆形虚线作为 CALayer?
【发布时间】:2016-10-24 15:42:50
【问题描述】:

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

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

这是我用来生成虚线的代码:

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;

然而,这最终什么也没画。

【问题讨论】:

  • 我不知道 CALayer,但很明显,如果您查看 UIBezierPath,您会画一条“直线”,而不是圆形。
  • @Larme 我刚刚贴了一张我想做的图片。
  • 如果答案正常。请接受我的答案。

标签: ios objective-c calayer


【解决方案1】:

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

CAShapeLayer *circleLayer = [CAShapeLayer layer];
[circleLayer setPath:[[UIBezierPath bezierPathWithOvalInRect:CGRectMake(50, 50, 100, 100)] CGPath]];
circleLayer.lineWidth = 2.0;
[circleLayer setStrokeColor:[[UIColor redColor] CGColor]];
[circleLayer setFillColor:[[UIColor clearColor] CGColor]];
circleLayer.lineJoin = kCALineJoinRound;
circleLayer.lineDashPattern = [NSArray arrayWithObjects:[NSNumber numberWithInt:2],[NSNumber numberWithInt:3 ], nil];
// self.bgImage is parentView
[[self.bgImage layer] addSublayer:circleLayer];

self.bgImage.layer.borderWidth = 1.0f;
self.bgImage.layer.borderColor = [[UIColor blueColor]CGColor];

我已经附上了图片的输出

【讨论】:

    【解决方案2】:

    就我而言,我必须设置 lineCapStyle 而不是 lineJoinStyle

    【讨论】:

      猜你喜欢
      • 2014-03-27
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 2022-06-21
      • 1970-01-01
      • 1970-01-01
      • 2019-12-24
      • 1970-01-01
      相关资源
      最近更新 更多