2015-08-23 16 views
8

Ich habe wie folgt für Halbkreis in iOS mit UIBezierPath und CAShapeLayer codiert.Anfangs- und Endwinkel von UIBezierPath?

clockWiseLayer = [[CAShapeLayer alloc] init]; 

CGFloat startAngle = -M_PI_2; 
CGFloat endAngle = M_PI + M_PI_2; 

CGFloat width = CGRectGetWidth(imageView.frame)/2.0f + 30; 
CGFloat height = CGRectGetHeight(imageView.frame)/2.0f +50; 
CGPoint centerPoint = CGPointMake(width, height); 

float radius = CGRectGetWidth(imageView.frame)/2+10; 

clockWiseLayer.path = [UIBezierPath bezierPathWithArcCenter:centerPoint 
                radius:radius 
               startAngle:startAngle 
                endAngle:endAngle 
               clockwise:YES].CGPath; 

clockWiseLayer.fillColor = [UIColor clearColor].CGColor; 
clockWiseLayer.strokeColor = [UIColor blueColor].CGColor; 
clockWiseLayer.borderColor = [UIColor greenColor].CGColor; 
clockWiseLayer.backgroundColor = [UIColor redColor].CGColor; 

clockWiseLayer.strokeStart = 0.0f; 
clockWiseLayer.strokeEnd = 0.5f; 

clockWiseLayer.lineWidth = 2.0f; 
clockWiseLayer.borderWidth = 5.0f; 

clockWiseLayer.shouldRasterize = NO; 
[self.layer addSublayer:clockWiseLayer]; 

Dies ergibt sich wie folgt.

enter image description here

Ich mag diesen blauen Halbkreis auf der gegenüberliegenden Seite der Weltkugel.

Es ist Halbkreis, aber ich will es auf der anderen Seite, auch CounterClockWise.

Ich bin nicht in der Lage, Anfang und Ende Winkel dafür zu setzen, während im Uhrzeigersinn: NO.

Danke.

+0

Haben Sie versucht, nur von M_PI_2 zu starten und M_PI_2 + M_PI zu beenden? –

+0

Ja, das habe ich getan, keine Verwendung. es kommt nicht genau entgegen. –

+0

Was meinst du mit "Ich bin ** nicht in der Lage, Anfang und Ende Winkel dafür zu setzen, während im Uhrzeigersinn: NEIN" Es zeichnet keinen Halbkreis? Es stürzt ab? etwas anderes? – Avt

Antwort

15

sollen Sie von M_PI ziehen + M_PI_2 Und dann Sie setzen strokeEnd auf 1.0f

prüfen Dokumentation Koordinaten: http://i.stack.imgur.com/1yJo6.png

enter image description here

Es ist ein wenig verwirrend ist, aber 0 ist nicht Spitze des Kreises

CGFloat startAngle = M_PI_2; 
CGFloat endAngle = startAngle + M_PI; 
CGFloat width = CGRectGetWidth(imageView.frame)/2.0f; 
CGFloat height = CGRectGetHeight(imageView.frame)/2.0f; 
CGPoint centerPoint = CGPointMake(width, height); 
float radius = CGRectGetWidth(imageView.frame)/2+10; 
CAShapeLayer* clockWiseLayer = [[CAShapeLayer alloc] init]; 
clockWiseLayer.path = [UIBezierPath bezierPathWithArcCenter:centerPoint 
                radius:radius 
               startAngle:startAngle 
                endAngle:endAngle 
                clockwise:YES].CGPath; 

clockWiseLayer.fillColor = [UIColor clearColor].CGColor; 
clockWiseLayer.strokeColor = [UIColor blueColor].CGColor; 
clockWiseLayer.borderColor = [UIColor greenColor].CGColor; 
clockWiseLayer.backgroundColor = [UIColor redColor].CGColor; 

clockWiseLayer.strokeStart = 0.0f; 
clockWiseLayer.strokeEnd = 1.0f; 

clockWiseLayer.lineWidth = 2.0f; 
clockWiseLayer.borderWidth = 5.0f; 
[self.layer addSublayer:clockWiseLayer]; 
+0

FERTIG. danke ....... –

+0

Wenn ich einen Kreis von oben nach oben gegen den Uhrzeigersinn verschieben möchte, was sollte der Anfangs- und Endwinkel sein? Bitte helfen Sie –

+0

Works Good ........ –

2

Sie beginnen von oben des Kreises mit -M_PI_2 und enden bei M_PI + M_PI_2 (wenn Sie Kreis haben wollen und begrenzen es strokeEnd verwenden, strokeStart). Dann die Kreisbahn festgelegt von der Hälfte des Endes des Weges (linke Seite des Bildes) zu ziehen, anstatt von Anfang bis der Hälfte (rechte Seite des Bildes)

CGFloat startAngle = -M_PI_2; 
CGFloat endAngle = M_PI + M_PI_2; 

clockWiseLayer.strokeStart = .5f; 
clockWiseLayer.strokeEnd = 1.0f; 
+0

upvoted staunen (ausblenden). Vielen Dank. –

1

Ich habe mit bezierPathWithArcCenter gespielt und es funktioniert ziemlich seltsam, wenn clockwise = NO. Aber wenn man einen Kreis Bezier-Pfad mit conterclockwise Richtung erstellen möchten, können Sie einen im Uhrzeigersinn Pfad erstellen und kehrt dann mit bezierPathByReversingPath

Ein neuer Weg Objekt mit dem gleichen Pfadform, für die aber der Weg in die geschaffen wurde, umgekehrte Richtung.