Ho letto ciò che ritengo essere le parti rilevanti della Guida di programmazione 2D di Quartz, ma non riesco a trovare una risposta a quanto segue (non sembrano parlare molto su iOS nel documento):Come creare un CGLayer da un UIView per il disegno fuori schermo
La mia applicazione visualizza un disegno in un UIView
. Ogni tanto devo aggiornare il disegno in qualche modo, ad es. cambia il colore di riempimento di una delle forme (tengo CGPathRefs
alle forme importanti per poterle ridisegnare con un colore di riempimento diverso in seguito). Come descritto nella sezione "disegno con una CGLayer" a pagina 169 del documento citato, stavo pensando di disegnare l'intero disegno in un CGContext
che avrei ottenere da un CGLayer
, in questo modo:
CGContextRef offscreenContext = CGLayerGetContext(offscreenLayer);
Poi ho potrebbe fare il mio aggiornamento fuori dallo schermo nella CGContext
e disegnare la CGLayer
nel mio UIView in drawRect s' il UIView
: metodo, in questo modo:
CGContextDrawLayerAtPoint(viewContext, CGPointZero, offscreenLayer);
il problema che sto avendo è, dove posso avere il mio CGLayer
da ? La mia comprensione è che devo farlo usando CGLayerCreateWithContext
e fornire un CGContext
come parametro da cui eredita la maggior parte delle sue proprietà. Ovviamente, il contesto giusto sarebbe il contesto della UIView
, che sto ottenendo con
CGContextRef viewContext = UIGraphicsGetCurrentContext();
ma se non mi sbaglio, posso solo ottenere che all'interno del drawRect
: metodo e non è valida per ritenere che il contesto che mi viene dato sarà lo stesso la prossima volta che viene chiamato il metodo, cioè posso usare solo quello CGContext
localmente all'interno del metodo.
Così, come posso ottenere un CGContext
che posso usare per inizializzare il mio CGLayer
per creare un fuori campo CGContext
per disegnare in e quindi disegnare l'intero livello di nuovo in s' CGContext
miei UIView
?
PS: Mentre ci sei; se qualcosa di cui sopra non ha senso o non è sano, per favore fatemelo sapere. Sto appena iniziando a girare la testa su Quartz 2D.
Sono anche bloccato con il problema CGLayer, non sto capendo come scriverlo nelle mie funzioni touchedmoved, puoi per favore dare un'occhiata al mio post http://stackoverflow.com/questions/11341763/how-to- use-cglayer-for-optimal-drawing – Ranjit
CGContextBeginPath() e CGContextClosePath() accettano un parametro del contesto. – Ant