2011-02-28 26 views
10

Estoy tratando de obtener un fondo transparente en CG pero sigue saliendo en negro.Fondo transparente en CoreGraphics

tengo el siguiente código:

- (id)initWithFrame:(CGRect)frame { 
    if ((self = [super initWithFrame:frame])) { 
     DLog(@">>> Alloc: DrawingCanvas [0x%X]", (unsigned int)self); 
     [self setOpaque:NO]; 
     [self setBackgroundColor:[UIColor clearColor]]; 
    } 
    return self; 
} 

- (void) drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGRect frame = rect; 
    int counter = 3; 

    CGContextClearRect(context, frame); 
    CGContextSetFillColorWithColor(context, [UIColor clearColor].CGColor); 
    CGContextFillRect(context, frame); 
} 

¿Cómo puedo obtener el código para mostrar un fondo transparente?

+0

¿Encontró una solución? Si es así, por favor, compártala respondiendo su propia pregunta. –

Respuesta

4

Con esa configuración y siempre que no configure clearsContextBeforeDrawing en NO, el fondo ya debería ser transparente cuando se llame al método drawRect:. Elimine CGContextClearRect y otras llamadas de dibujo.

+0

Utilizaré el mismo código (similar) en otro lugar donde reciba un contexto pasado y tendré que borrarlo cada vez, por lo que no veo que pueda eliminar la llamada a 'CGContextClearRect' - a menos que pueda borrarlo de una manera diferente? – Egil

3

Usted puede simplemente eliminar estas líneas:

CGContextClearRect(context, frame); 
CGContextSetFillColorWithColor(context, [UIColor clearColor].CGColor); 
CGContextFillRect(context, frame); 

Mientras haya configurado opaco a NO y clearColor como backgroundColor todo debería estar bien.

Tenga cuidado al dibujar, ya que su otro código de dibujo puede rellenar completamente el fondo (tenga en cuenta [path fill] cosas en un contexto no recortado).

1

Tuve el mismo problema y la solución fue establecer la propiedad backgroundColor del UIView que estaba dibujando, desde la clase de vista principal. No necesité ningún código para borrar el fondo en la clase de UIView donde ocurre el dibujo.

myDrawingView.backgroundColor = [UIColor clearColor];