Ich versuche, einen Beschneidungspfad in Form eines Pluszeichens zu erstellen, damit nachfolgende Abschnitte, die ich in den gleichen Kontext zeichne, diesen Teil entfernt haben. Ich erstelle den Beschneidungspfad mit zwei überlagerten Rechteckpfaden.iOS - Clipping Union von zwei Pfaden mit UIBezierPath appendPath
Dies ist, was ich die letzte Zeichnung aussehen möchte, wenn ich einen Kreis anschließend ziehen:
xXX | | XXx
XXXX | | XXXX
XXXXX | | XXXXX
--- ---
--- ---
XXXXX | |
XXXX | | XXXX
xXX | | XXx
aber es sieht tatsächlich wie folgt aus:
xXX | | XXx
XXXX | | XXXX
XXXXX | | XXXXX
--- XX ---
--- XX ---
XXXXX | |
XXXX | | XXXX
xXX | | XXx
Wenn ich dieses Verhalten richtig lese, ist der Schnittpunkt der beiden Rechteckpfade nicht Teil der Schnittmaske.
Es scheint (nicht überraschend), dass appendPath in diesem Fall keinen einzigen vereinheitlichten Pfad von meinen zwei Rechteckpfaden erzeugt - ich nehme an, dass ich nichts dagegen tun kann. Außerdem scheint Core Graphics keine Funktionen in Bezug auf Pfadverbindungen usw. zu haben.
Hat jemand eine Idee, was ich tun kann? Ich habe das entsprechende Code-Snippet eingefügt.
Das Pluszeichen unter Verwendung eines Pfades zu zeichnen ist keine Lösung, da ich meiner Schnittmaske andere überlappende Pfade hinzufügen möchte.
CGContextSaveGState(context);
// create clipping path
UIBezierPath *clippingPath = [UIBezierPath bezierPath];
clippingPath = [UIBezierPath bezierPathWithRect:CGRectMake(centrePoint.x - 2.0f, 0.0f, 4.0f, self.sizeY)];
[clippingPath appendPath:[UIBezierPath bezierPathWithRect:CGRectMake(0.0f, centrePoint.y - 2.0f, self.sizeX, 4.0f)]];
// use the clipping path to create a hole in the context
CGContextAddPath(context, clippingPath.CGPath);
CGRect boundingRect = CGContextGetClipBoundingBox(context);
CGContextAddRect(context, boundingRect);
CGContextEOClip(context);
// draw the icon shape (clipped portion is removed)
iconBezierPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(self.sizeX/3.0f, self.sizeY/2.25f, self.sizeX/3.0f, self.sizeX/3.0f)];
[highlightColor setFill];
[iconBezierPath fill];
CGContextRestoreGState(context);
Große - CGRectIntersection war, was ich fehlte. Vielen Dank –