Sto tentando di creare un tracciato di ritaglio sotto forma di segno più, in modo che i percorsi successivi che disegno nello stesso contesto abbiano questa parte rimossa. Creo il tracciato di ritaglio usando due percorsi rettangolari sovrapposti l'uno sull'altro.iOS: unione di due percorsi tramite UIBezierPath appendPath
Questo è quello che mi piacerebbe il disegno finale a guardare come quando ho successivamente disegnare un cerchio:
XXX | | XXx
XXXX | | XXXX
XXXXX | | XXXXX
--- ---
--- ---
XXXXX | | XXXXX
XXXX | | XXXX
XXX | | XXx
Tuttavia, oggi si presenta in questo modo:
XXX | | XXx
XXXX | | XXXX
XXXXX | | XXXXX
--- --- XX
--- --- XX
XXXXX | | XXXXX
XXXX | | XXXX
XXX | | XXx
Se leggo correttamente questo comportamento, l'intersezione dei due percorsi rettangolari non fa parte della maschera di ritaglio.
Sembra (non sorprendentemente) che appendPath non crei un singolo percorso unificato dai miei due percorsi rettangolari in questo caso - presumo che non ci sia nulla che io possa fare al riguardo. Inoltre, Core Graphics non sembra avere alcuna funzione relativa alle unioni dei percorsi, ecc.
Qualcuno ha qualche idea su cosa posso fare? Ho incluso lo snippet di codice pertinente.
Disegnare il segno più utilizzando un percorso non è una soluzione, poiché desidero aggiungere altri percorsi sovrapposti alla mia maschera di ritaglio.
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);
Grande - CGRectIntersection era quello che mi mancava. Grazie –