Warum gibt es bei addArcWithCenter einen startAngle von 0 Grad bei 90 Grad?
Ich bin erstellen einer CAShapeLayer
zu verwenden, als Maske für einen UIView
's Schicht. Ich bin mit einem UIBezierPath
um die Form zu zeichnen Ebene. Es funktioniert Prima, außer das ich immer einige seltsame Ergebnisse, wenn ich zeichne. Die geometrie ist nicht verhält wie erwartet. Ich bin versucht zu zeichnen einfach "pie slice" in der oberen rechten Ecke:
#define degreesToRadians(x) ((x) * M_PI / 180.0)
...
//"layer" refer's to the UIView's root layer
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.frame =
layer.presentationLayer ?
((CAGradientLayer *)layer.presentationLayer).bounds : layer.bounds;
maskLayer.fillRule = kCAFillRuleEvenOdd;
maskLayer.needsDisplayOnBoundsChange = YES;
CGFloat maskLayerWidth = maskLayer.bounds.size.width;
CGFloat maskLayerHeight = maskLayer.bounds.size.height;
CGPoint maskLayerCenter =
CGPointMake(maskLayerWidth/2,maskLayerHeight/2);
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:maskLayerCenter];
[path addArcWithCenter:maskLayerCenter radius:(maskLayerWidth/2)
startAngle:degreesToRadians(0) endAngle:degreesToRadians(90) clockwise:YES];
[path closePath];
maskLayer.path = path.CGPath;
layer.mask = maskLayer;
Das Endergebnis ist, dass ein Kreissegment gezeichnet wird in der unteren rechten Ecke. Der erste Punkt des Bogens ist gezogen, die 90 Grad, dann runter auf 180. Warum macht er das obwohl ich mit 0 und 90 Grad Winkel?
InformationsquelleAutor der Frage zakdances | 2013-04-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieses Bild kommt direkt aus die Dokumentation.
Und es gibt eine Diskussion darüber, wie es funktioniert (das Standard-Koordinatensystem)
Dies ist, wie die Winkel, die arbeiten für
addArcWithCenter:radius:startAngle:endAngle:clockwise:
. Wenn das ist nicht, was Sie sehen, dann sind Sie die Berechnung der Winkel falsch.InformationsquelleAutor der Antwort David Rönnqvist
Haben Sie einen Blick auf Abbildung 1 in der bezierPathWithArcCenter:radius:startAngle:endAngle:im Uhrzeigersinn: Dokumentation: Für eine "pie slice" in der oberen rechten Ecke
verwenden Sie den Parameter
(Der Grund ist, dass das Standard-Koordinatensystem auf iOS hat eine x-Achse nach rechts und die y-Achse nach unten zeigt.)
InformationsquelleAutor der Antwort Martin R