Próbuję utworzyć ścieżkę przycinającą w kształcie znaku plus, tak aby kolejne ścieżki, które rysuję w tym samym kontekście, zostały usunięte. Tworzę ścieżkę przycinającą za pomocą dwóch prostokątnych ścieżek nałożonych na siebie nawzajem.iOS - Clipping union dwóch ścieżek przy użyciu UIBezierPath appendPath
To co chciałbym ostateczny rysunek wyglądać kiedy następnie narysować okrąg:
XXX | | XXx
XXXX | | XXXX
XXXXX | | XXXXX
--- --- ---
---
XXXXX | | XXXXX
XXXX | | XXXX
XXX | | xxx
Jednak faktycznie wygląda następująco:
XXX | | XXx
XXXX | | XXXX
XXXXX | | XXXXX
--- XX ---
--- XX ---
XXXXX | | XXXXX
XXXX | | XXXX
XXX | | XXx
Jeśli poprawnie odczytam to zachowanie, przecięcie dwóch prostokątnych ścieżek nie stanowi części maski przycinającej.
Wydaje się (co nie dziwi), że appendPath nie tworzy pojedynczą jednolitą ścieżkę z moich dwóch prostokątnych ścieżek w tym przypadku - Jestem przy założeniu, że nie ma nic nie mogę z tym zrobić. Co więcej, Core Graphics nie ma żadnych funkcji związanych ze związkami ścieżek itp.
Czy ktoś ma pojęcie, co mogę zrobić? Dodałem odpowiedni fragment kodu.
Rysowanie znaku plus za pomocą jednej ścieżki nie jest rozwiązaniem, ponieważ chcę dodać inne nakładające się ścieżki do maski przycinającej.
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);
Wielki - CGRectIntersection było to, czego brakowało. Dzięki –