Заполнение инверсии CGPath без отсечения

Скажем, у меня есть CGPath, который представляет собой круг в CGContextRef. Что я хотел бы сделать, так это заполнить инверсию пути цветом. Ниже показано, где круг — это текущий нарисованный путь, и я хотел бы заполнить инверсию круга цветом, оставив пустое отверстие:

введите здесь описание изображения


person Live2Enjoy7    schedule 07.10.2013    source источник


Ответы (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
comment
это хорошее предложение, за исключением того, что у меня есть перекрывающиеся круги, и даже нечетные значения приводят к нежелательным результатам. - person Live2Enjoy7; 07.10.2013

Поскольку у вас есть перекрывающиеся круги, вам нужно создать один путь, представляющий объединение этих кругов, затем добавить этот путь к вашему прямоугольнику и заполнить, как предложил Дэвид.

Для создания объединения круговых путей этот проект окажется бесценным:

https://bitbucket.org/martinwinter/vectorbooleancg

Убедитесь, что вы проверили ветку «CGPath», чтобы получить поддержку iOS.

person tarmes    schedule 07.10.2013