ho una visione strato di hosting istituito come questo in un costume NSView
sottoclasse:Calling setNeedsDisplay: SI sul layer-hosting vista non ridisegna la vista
[self setLayer:rootLayer];
[self setWantsLayer:YES];
aggiungo tutti i sottolivelli all'albero strato di dopo ho chiamato setNeedsDisplay
su ogni sottolivello. Il contenuto di ogni livello è fornito dal metodo drawLayer:inContext
del delegato del mio livello.
Ecco il mio problema:
Dopo l'inizializzazione mio punto di vista il panorama diventa disegnare correttamente. Tuttavia, quando il modello è cambiato e chiamo il [myCustomView setNeedsDisplay:YES];
dal mio controller di visualizzazione, non viene chiamato lo drawLayer:inContext
.
Sono confuso ora come aggiornare la vista:
- Devo chiamare il metodo
setNeedsDisplay
su ogni CALayer nell'albero strato? - Non dovrebbe la chiamata di
setNeedsDisplay:YES
nella vista di hosting del livello stesso attivare il ridisegno dell'intero albero dei livelli?
Grazie per il vostro aiuto.
Modifica
ho trovato qualcosa nella classe NSView riferimento
Una vista layer-backed è una vista che è sostenuta da uno strato di Core Animation. Qualsiasi disegno eseguito dalla vista è memorizzato nella cache nel livello di supporto. Hai configurato una vista supportata da livelli semplicemente richiamando setWantsLayer: con un valore di YES. La classe vista creerà automaticamente un livello di supporto per te e utilizzerai i meccanismi di disegno della classe vista. Quando si utilizzano viste supportate da livelli, non si dovrebbe mai interagire direttamente con il livello.
Una vista di hosting del livello è una vista che contiene un livello Animazione core che si desidera manipolare direttamente. Crei una vista di hosting dei livelli istanziando un'istanza di una classe di livello Core Animation e impostando tale livello utilizzando il metodo setLayer: view. Dopo averlo fatto, invochi setWantsLayer: con un valore di YES. Quando si utilizza una vista di hosting del livello non si deve fare affidamento sulla vista per il disegno, né si dovrebbero aggiungere subviews alla vista di hosting del livello.
Nel mio caso ho una visione layer-hosting. Quindi vuol dire che devo attivare manualmente il ridisegno? Devo implementare un metodo pseudo drawRect nella NSView personalizzata per chiamare il setNeedsDisplay appropriato sui CALayer che sono stati modificati?
Il tuo link al codice di esempio è rotto, forse questa è la sostituzione: https://developer.apple.com/library/mac/samplecode/CoreAnimationKioskStyleMenu/Introduction/Intro.html#//apple_ref/doc/uid/ DTS40009512 –