Como criar um CGLayer a partir de um UIView para desenho fora da tela
Li o que acredito serem as partes relevantes do Guia de programação em quartzo 2D, mas não consigo encontrar uma resposta para o seguinte (elas parecem não falar muito sobre iOS no documento):
Meu aplicativo exibe um desenho em umUIView
. De vez em quando eu tenho que atualizar o desenho de alguma forma, por exemplo alterar a cor de preenchimento de uma das formas (eu mantenhoCGPathRefs
às formas importantes para redesenhá-las com uma cor de preenchimento diferente posteriormente). Conforme descrito na seção "Desenhando com um CGLayer" na página 169 do documento mencionado, eu estava pensando em desenhar o desenho inteiro em umCGContext
que eu obteria de umCGLayer
, igual a:
CGContextRef offscreenContext = CGLayerGetContext(offscreenLayer);
Então eu poderia fazer minha atualização fora da tela noCGContext
e desenhe oCGLayer
no meu UIView noUIView
do método drawRect:, assim:
CGContextDrawLayerAtPoint(viewContext, CGPointZero, offscreenLayer);
O problema que estou tendo é: de onde encontro meuCGLayer
de? Meu entendimento é que tenho que fazê-lo usandoCGLayerCreateWithContext
e fornecer umaCGContext
como um parâmetro do qual herda a maioria de suas propriedades. Obviamente, o contexto correto seria o contexto daUIView
que eu estou recebendo com
CGContextRef viewContext = UIGraphicsGetCurrentContext();
mas se não me engano, só consigo entender isso dentro dodrawRect
: method e não é válido supor que o contexto que recebi será o mesmo na próxima vez que o método for chamado, ou seja, só posso usar esseCGContext
localmente dentro do método
Então, como posso obter umCGContext
que eu posso usar para inicializar meuCGLayer
para criar uma tela fora da telaCGContext
para atrair e desenhar toda a camada de volta para o meuUIView
éCGContext
?
PS: Enquanto você está nisso; se algo acima não fizer sentido ou não for sensato, entre em contato. Estou apenas começando a entender o Quartz 2D.