2011-05-09 10 views
6

Estoy tratando de hacer una aplicación de dibujo simple para el iPad donde se puede dibujar una imagen, y estoy usando CGContext cosas para hacerlo, pero la forma en que originalmente planeé en el manejo de borrado fue simplemente dibuje cosas con blanco ... excepto que hoy me di cuenta de que no funciona cuando está dibujando en otra imagen porque luego cuando "borra" también "borrará" la imagen de fondo.Borrando después de dibujar con CGContext

¿Hay alguna forma de admitir el borrado real?

Gracias!

Respuesta

4

Muestra el dibujo del usuario en una capa encima de la imagen. Luego, borrar es tan simple como dibujar un parche transparente en la capa de dibujo para dejar ver los píxeles de la imagen debajo.

+0

¿Cómo se dibuja un parche transparente? He usado 'CGContextSetRGBStrokeColor' con un alfa de 0.0, pero parece que no funciona. – Roberto

+0

Juega con el modo de composición (Copia en lugar de SourceIn, por ejemplo) y considera llenar y acariciar. –

+2

revise el código fuente https://github.com/yusenhan/Smooth-Line-View –

19

También necesitaba la funcionalidad de borrado. Basado en la respuesta de @ Jeremy, esto es lo que funcionó para mí:

CGContextRef cgref = UIGraphicsGetCurrentContext(); 

if(erase == TRUE) // Erase to show background 
{ 
    CGContextSetBlendMode(cgref, kCGBlendModeClear); 
} 
else // Draw with color 
{ 
    CGContextSetBlendMode(cgref, kCGBlendModeNormal); 
} 
+0

¡usted es mi héroe, muchas gracias por brindar una solución tan simple! – Bek

+1

Primero voy por el tutorial de Ray Wenderlich para crear una aplicación de dibujo simple. Todo funciona para ello, pero cuando cambio el modo de fusión a kCGBlendModeClear, todo lo que hace es borrar todo el lienzo una vez que se toca los extremos. ¿Alguna idea? –

+0

Excelente, aunque demasiado detallado. Puede hacer lo mismo con un trazador de líneas: 'CGContextSetBlendMode (UIGraphicsGetCurrentContext(), erase? KCGBlendModeClear: kCGBlendModeNormal);' – SaltyNuts