Это не в моей голове, но ...
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
?