Cómo crear un CGLayer desde una UIView para dibujar fuera de la pantalla

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):

Mi aplicación muestra un dibujo en unUIView. De vez en cuando tengo que actualizar el dibujo de alguna manera, p. cambiar el color de relleno de una de las formas (sigoCGPathRefs a las formas importantes para poder volver a dibujarlas con un color de relleno diferente más adelante). Como se describe en la sección "Dibujar con un CGLayer" en la página 169 del documento mencionado anteriormente, estaba pensando en dibujar todo el dibujo en unCGContext que obtendría de unCGLayer, al igual que:

CGContextRef offscreenContext = CGLayerGetContext(offscreenLayer);

Entonces podría hacer mi actualización fuera de la pantalla en elCGContext y dibuja elCGLayer en mi UIView en elUIView'drawRect: método, así:

CGContextDrawLayerAtPoint(viewContext, CGPointZero, offscreenLayer);

El problema que tengo es, ¿dónde consigo miCGLayer ¿de? Tengo entendido que tengo que hacerlo usandoCGLayerCreateWithContext y suministrar unCGContext como un parámetro del que hereda la mayoría de sus propiedades. Obviamente, el contexto correcto sería el contexto de laUIView, que estoy obteniendo con

CGContextRef viewContext = UIGraphicsGetCurrentContext();

pero si no me equivoco, solo puedo obtener eso dentro deldrawRect: método y no es válido suponer que el contexto que se me dará será el mismo la próxima vez que se llame al método, es decir, solo puedo usar eseCGContext localmente dentro del método.

Entonces, ¿cómo puedo obtener unCGContext que puedo usar para inicializar miCGLayer para crear un fuera de pantallaCGContext para dibujar y luego dibujar toda la capa de nuevo en miUIView'sCGContext?

PD: Mientras estás en eso; Si algo de lo anterior no tiene sentido o no es sensato, hágamelo saber. Estoy empezando a entender a Quartz 2D.

Respuestas a la pregunta(1)

Su respuesta a la pregunta