Основная графика, как нарисовать прямоугольник с отверстием прозрачности эллипса? - PullRequest
3 голосов
/ 29 июля 2011

Я пытаюсь нарисовать прямоугольник 320x480, который выдолблен эллипсом.Представьте, что вы рисуете заполненный прямоугольник, поверх прямоугольника заполненный эллипс и удалите эллипс из прямоугольника, оставляя прозрачное отверстие.работа.

У кого-нибудь есть решение?

1 Ответ

12 голосов
/ 29 июля 2011

Это не в моей голове, но ...

CGPathRef cutoutRect = CGPathCreateMutable();       
CGPathAddRect(cutoutRect, NULL, rect);
CGPathAddEllipseInRect(cutoutRect, NULL, ellipseRect);

CGContextAddPath(context, cutoutRect);  
CGContextSetRGBFillColor(context, 1.0, 1.0, 0.0, 1.0);
CGContextFillPath(context);

Возможно, вам действительно понадобится использовать CGContextEOFillPath, я никогда не смогу держать их прямо .Функции CGContextClip -типа должны использоваться до рисования, а не после, но они, вероятно, не нужны в этом случае.

Тем не менее, вы не должны делать это в-drawRect: реализация, но путь должен быть установлен на CAShapeLayer, который является подуровнем этого представления, или его единственным слоем, или, действительно, слоем, который используется вместо этого представления, если это возможно.

Также обратите внимание, что прямоугольник, переданный в drawRect:, может быть только частью всего представления, поэтому ваш код будет иметь довольно странные результаты как есть.Вы имели в виду self.bounds?

...