2012-01-24 14 views
6

soy muy nuevo en el manejo de CGContexts y solo estoy tratando de entender las cosas siguiendo un simple toque de pintura & sketch tutorial (http://blog.effectiveui.com /? p = 8105)Cambiando el color de fondo de un CGContext

He golpeado una pared de ladrillo cuando se trata de cambiar el color de fondo de mi CGContext.

estoy iniciando la Conext así:

- (BOOL) initContext:(CGSize)size { 
    int bitmapBytesPerRow; 
    bitmapBytesPerRow = (size.width * 4); 
    cacheContext = CGBitmapContextCreate (nil, size.width, size.height, 8, bitmapBytesPerRow, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaNoneSkipLast); 
    CGContextSetRGBFillColor(cacheContext, 1, 1, 1, 1); 
    return YES; 
} 

y cambiar los colores de trazo y anchos como esto:

UIColor *color = [UIColor whiteColor]; 
CGContextSetStrokeColorWithColor(cacheContext, [color CGColor]); 
CGContextSetLineCap(cacheContext, kCGLineCapRound); 
CGContextSetLineWidth(cacheContext, 4); 

pero cuando intento para cambiar el color de fondo de negro (ya sea en el init o en las partes de configuración de dibujo/carrera) usando CGContextSetRGBFillColor(cacheContext, 1, 1, 1, 1); no hay ningún efecto.

¿Alguien puede señalarme en la dirección correcta de un lugar mejor/correcto para realizar esa llamada o la llamada correcta para usar? ¡Muchas gracias por tu tiempo!

+0

posible duplicar: http://stackoverflow.com/questions/2571550/how-i-set-the-background-color-in-uiview-using-cgcontext – Saphrosit

Respuesta

22

No puede simplemente establecer el color y esperar que el contexto se llene con el nuevo color. Necesitas realmente dibujar ese color en el contexto. En el método init, después de ajustar el color de relleno, trate de usar algo como

CGContextFillRect(cacheContext, (CGRect){CGPointZero, size}); 

En una nota relacionada, el contexto no tienen un color negro por defecto. Ellos tienen un color transparente. Ahora, si su contexto no tiene un canal alfa, entonces esto terminará siendo negro, pero si su contexto tiene un canal alfa y está viendo negro, es porque está renderizando la salida sobre algo negro. (O, alternativamente, coloca la imagen transparente en una capa que tiene el indicador opaque establecido en verdadero y CoreAnimation termina dibujando sobre el negro).

+0

Eso funcionó a la perfección. ¡Muchas gracias por la respuesta y la clara explicación! – DaveDee

Cuestiones relacionadas