He leído lo que creo que son las partes relevantes de la Guía de programación 2D de Quartz, pero no puedo encontrar una respuesta a lo siguiente (no parecen hablar mucho sobre iOS en el documento):Cómo crear un CGLayer desde un UIView para el dibujo fuera de la pantalla
Mi aplicación muestra un dibujo en un UIView
. De vez en cuando tengo que actualizar el dibujo de alguna manera, p. cambie el color de relleno de una de las formas (guardo CGPathRefs
en las formas importantes para poder volver a dibujarlas con un color de relleno diferente más adelante). Según se describe en la sección "Cómo dibujar con un CGLayer" en la página 169 del documento antes mencionado, que estaba pensando en el dibujo el dibujo completo en un CGContext
que iba a obtener de un CGLayer
, así:
CGContextRef offscreenContext = CGLayerGetContext(offscreenLayer);
Entonces podría hacer mi actualización fuera de la pantalla en el CGContext
y dibujar la CGLayer
en mi UIView en drawRect la UIView
's: método, así:
CGContextDrawLayerAtPoint(viewContext, CGPointZero, offscreenLayer);
el problema que estoy teniendo es, dónde consigo mi CGLayer
de ? Según tengo entendido, debo hacerlo utilizando CGLayerCreateWithContext
y suministrar un CGContext
como un parámetro del cual hereda la mayoría de sus propiedades. Obviamente, el contexto adecuado sería el contexto de la UIView
, que me estoy haciendo con
CGContextRef viewContext = UIGraphicsGetCurrentContext();
pero si no me equivoco, sólo puedo conseguir que dentro de la drawRect
: método y no es válido suponer que el contexto que se me da será el mismo la próxima vez que se llame al método, es decir, solo puedo usar ese CGContext
localmente dentro del método.
Entonces, ¿cómo puedo obtener una CGContext
que puedo utilizar para inicializar mi CGLayer
para crear un fuera de la pantalla para dibujar en CGContext
y luego dibujar la capa entera de nuevo en mis UIView
's CGContext
?
PD: Mientras lo hace; si algo anterior no tiene sentido o no está cuerdo, házmelo saber. Estoy comenzando a mover mi cabeza alrededor de Quartz 2D.
También estoy atascado con el problema de CGLayer, no entiendo cómo escribir en mis funciones tocadas, ¿puedes echar un vistazo a mi publicación http://stackoverflow.com/questions/11341763/how-to- use-cglayer-for-optimal-drawing – Ranjit
CGContextBeginPath() y CGContextClosePath() toman un parámetro del contexto. – Ant