2016-06-22 16 views
2

Ich lese diesen Beitrag Draw dotted (not dashed!) line, with IBDesignable in 2017 über das Zeichnen einer gepunkteten Linie (anstatt einer gestrichelten Linie). Allerdings bin ich mit Grafiken generell nicht so vertraut und ich frage mich, wie ich das mit einem CALayer machen kann (also muss ich nicht die ganze Grafik-Kontext-Sache machen).Wie erstellt man eine kreisförmige gepunktete Linie als CALayer?

Ich versuche, eine gepunktete Linie zu erzeugen, die wie folgt aussieht (der weiße Teil, den Hintergrund ignorieren):

dotted line

Hier ist der Code, den ich eine gestrichelte Linie zu produzieren haben arbeiten:

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; 

Wie kann ich den Code in der SO-Post spiegeln, auf die ich verwiesen habe, aber weiterhin einen CALayer verwenden?

Ich habe versucht, den Code von dieser Stelle zu modifizieren, wie so:

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; 

Doch diese endet nichts zeichnen.

+0

Ich weiß nicht über die CALayer, aber klar, wenn Sie auf den 'UIBezierPath' schauen, zeichnen Sie eine" gerade Linie ", und keine kreisförmige. – Larme

+0

@Larme Ich habe gerade ein Bild von dem, was ich machen möchte, eingefügt. – helloB

+0

wenn die antwort funktioniert gut. Akzeptieren sie meine antwort. –

Antwort

6

Ich hoffe, dies wird Ihnen helfen.

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

Ich habe die Ausgabe des Bildes enter image description here

1

In meinem Fall angebracht ich die lineCapStyle anstatt die lineJoinStyle gesetzt hatte.

Verwandte Themen