DrawRect do UIView: desenhe os pixels invertidos, faça um buraco, uma janela, espaço negativo

Com o código abaixo estou desenhando um retângulo arredondado. Ele desenha um retângulo arredondado preenchido em cinza claro sólido (no tamanho de "self"). Na verdade, quero desenhar o inverso de pixels disso, ou seja: não um retângulo arredondado sólido, mas uma janela ou um furo na forma desse retângulo arredondado em um sólido retângulo cinza claro.

Existe um método de clipe invertido que eu preciso usar? Ou eu preciso usar um caminho bezier? Desculpe se isso é muito básico, não é possível encontrar a informação embora.

Obrigado pela leitura!

- (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);

}

questionAnswers(5)

yourAnswerToTheQuestion