2016-06-22 3 views
2

Я прочитал этот пост Draw dotted (not dashed!) line, with IBDesignable in 2017 о рисовании пунктирной линии (а не пунктирной линии). Тем не менее, я не очень хорошо знаком с графикой, и мне интересно, как я могу это сделать с помощью CALayer (так что мне не нужно делать все, чтобы получить текущую графику).Как создать круговую пунктирную линию как 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; 

Однако, это заканчивается не рисовать ничего.

+0

Я не знаю о CALayer, но ясно, если вы посмотрите на 'UIBezierPath', вы рисуете« прямую линию », а не круговую. – Larme

+0

@ Larme Я только что вставил изображение того, что я хочу сделать. – helloB

+0

если ответ работает нормально. Добро пожаловать на мой ответ. –

ответ

6

Я надеюсь, что это вам поможет.

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]; 

Я приложил вывод изображения enter image description here

1

В моем случае я должен был установить lineCapStyle, а не lineJoinStyle.