UIView drawRect: dibuja los píxeles invertidos, crea un agujero, una ventana, un espacio negativo

Con el código de abajo estoy dibujando un rectángulo redondeado. Dibuja un rectángulo redondeado relleno gris claro sólido agradable (en el tamaño de "uno mismo"). De hecho, quiero dibujar el píxel inverso de esto, es decir: no es un rectángulo redondeado sólido, sino una ventana o agujero en la forma de este rectángulo redondo en un rectángulo gris claro sólido.

¿Hay un método de clip inverso que necesito usar? ¿O necesito usar una ruta de bezier? Disculpe si esto es muy básico, no puedo encontrar la información sin embargo.

¡Gracias por leer!

- (void)drawRect:(CGRect)rect
{

    // get the context
    CGContextRef context = UIGraphicsGetCurrentContext

    CGContextSaveGState(context);    

    //draw the rounded rectangle
    CGContextSetStrokeColorWithColor(context, [[UIColor blackColor] CGColor]);
    CGContextSetRGBFillColor(context, 0.8, 0.8, 0.8, 1.0);
    CGContextSetLineWidth(context, _lineWidth);

    CGRect rrect = CGRectMake(CGRectGetMinX(rect), CGRectGetMinY(rect), CGRectGetWidth(rect), CGRectGetHeight(rect));
    CGFloat radius = _cornerRadius;

    CGFloat minx = CGRectGetMinX(rrect), midx = CGRectGetMidX(rrect), maxx = CGRectGetMaxX(rrect);
    CGFloat miny = CGRectGetMinY(rrect), midy = CGRectGetMidY(rrect), maxy = CGRectGetMaxY(rrect);

    CGContextMoveToPoint(context, minx, midy);
    // Add an arc through 2 to 3
    CGContextAddArcToPoint(context, minx, miny, midx, miny, radius);
    // Add an arc through 4 to 5
    CGContextAddArcToPoint(context, maxx, miny, maxx, midy, radius);
    // Add an arc through 6 to 7
    CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, radius);
    // Add an arc through 8 to 9
    CGContextAddArcToPoint(context, minx, maxy, minx, midy, radius);
    // Close the path
    CGContextClosePath(context);

    // Fill the path
    CGContextDrawPath(context, kCGPathFill);

    CGContextRestoreGState(context);

}

Respuestas a la pregunta(5)

Su respuesta a la pregunta