Скажем, у меня есть CGPath, который представляет собой круг в CGContextRef. Что я хотел бы сделать, так это заполнить инверсию пути цветом. Ниже показано, где круг — это текущий нарисованный путь, и я хотел бы заполнить инверсию круга цветом, оставив пустое отверстие:
Заполнение инверсии CGPath без отсечения
Ответы (2)
Сначала добавьте прямоугольник к пути, а затем добавьте круг (или любой другой путь) к тому же пути. Затем сделайте четно-нечетную заливку, которая не заполнит круг, потому что она покрыта и кругом, и прямоугольником.
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRect(path, NULL, bigRect); // add the big rect
CGPathAddPath(path, NULL, circlePath); // add your shape (the circle)
CGContextDrawPath(path, kCGPathEOFill); // even-odd fill
person
David Rönnqvist
schedule
07.10.2013
это хорошее предложение, за исключением того, что у меня есть перекрывающиеся круги, и даже нечетные значения приводят к нежелательным результатам.
- person Live2Enjoy7; 07.10.2013
Поскольку у вас есть перекрывающиеся круги, вам нужно создать один путь, представляющий объединение этих кругов, затем добавить этот путь к вашему прямоугольнику и заполнить, как предложил Дэвид.
Для создания объединения круговых путей этот проект окажется бесценным:
https://bitbucket.org/martinwinter/vectorbooleancg
Убедитесь, что вы проверили ветку «CGPath», чтобы получить поддержку iOS.
person
tarmes
schedule
07.10.2013