2010-01-19 7 views
5

se crea un círculo con una sombra agradable con este código (utilizo MonoTouch.net para iPhone, Objective-C respuestas están muy bien, por supuesto)iPhone clara CGContext

 UIGraphics.PushContext (ctx); 
     SizeF shadowSize = new SizeF (0f, -3f); 
     ctx.SetRGBFillColor (194f/255f, 212f/255f, 238f/255f, 1f); 
     ctx.SetAllowsAntialiasing (true); 
     ctx.SetShadowWithColor (shadowSize, 20, new CGColor (0.9f, 0.7f)); 
     RectangleF area = new RectangleF (35f, 15f, 210f, 210f); 
     ctx.FillEllipseInRect (area); 
     UIGraphics.PopContext(); 

entonces quiero añadir a la misma una arco y líneas Cuando lo hago, ¿los colores, las sombras, etc. parecen quedarse? ¿Cómo comienzo 'fresco' mientras dibujo mi UIView? (Todo está en la misma UIView; estoy construyendo la imagen)

Respuesta

13

Si quiere borrar todo lo que está dibujado para tener un lienzo en blanco, pruebe CGContextClearRect antes de dibujar cualquier cosa.

Pero creo que quieres decir que quieres que la sombra, el color de relleno, etc. solo se apliquen a esa elipse y no a las cosas que dibujas después. Para hacer eso, desea llamar a los mismos métodos de establecimiento de estado nuevamente, pero con diferentes argumentos. Por ejemplo, CGContextSetShadowWithColor espera un color de sombra. Pero si pasa NULL para ese argumento, desactivará el sombreado.

Consulte también CGContextSetShadow documentation, que contiene una nota sobre todas las formas en que puede desactivar el sombreado. Elija el mejor para usted.

Creo que su principal problema es que no está aprovechando la excelente documentación de Apple. Entiendo que MonoTouch.net esencialmente mapea API de Objective-C a módulos .NET con nombres de símbolos similares o idénticos. Entonces, con una búsqueda rápida en Google, debería poder encontrar la documentación correspondiente en la Biblioteca de Referencia del iPhone OS.

+0

Eso despeja el círculo que acaba de dibujar aunque –

+0

Ah, lo entendí mal. Editando mi respuesta. –

1

Antes de empezar a dibujar, guardar el estado:

CGContextSaveGState(ctx); 

A continuación, después de que hayan terminado, volver al estado de lo que era al principio:

CGContextRestoreGState(ctx);