2012-02-02 10 views
9

Sto tentando di ottimizzare la mia app. È piuttosto visivamente ricco, quindi ha un sacco di UIViews a più livelli con immagini grandi e miscelazione ecc.È consigliabile eseguire la rasterizzazione su un CALayer per causare la rasterizzazione prima o dopo la trasformazione del livello?

Ho sperimentato la proprietà shouldRasterize su CALayers. In un caso in particolare, ho un UIView che consiste in molte viste secondarie, inclusa una tabella. Come parte di una transizione in cui scorre l'intero schermo, anche questo UIView ridimensiona e ruota (usando le trasformazioni).

Il contenuto di UIView rimane statico, quindi ho pensato che avrebbe avuto senso impostare view.layer.shouldRasterize = YES. Tuttavia, non ho visto un aumento delle prestazioni. Potrebbe essere che rasterizza ogni fotogramma alla nuova scala e rotazione? Speravo che si rasterizzasse all'inizio quando ha una matrice di trasformazione dell'identità e quindi lo memorizza nella cache mentre si ridimensiona e ruota durante la transizione?

In caso contrario, c'è un modo in cui potrei farlo accadere? A parte l'aggiunta di un super-view/layer extra ridondante che non fa altro che scalare e ruotare i suoi contenuti rasterizzati ...

risposta

8

È possibile rispondere alla propria domanda profilando l'applicazione utilizzando lo CoreAnimation instrument. Si noti che questo è disponibile solo in un dispositivo.

È possibile abilitare "Colpi di colore in verde e rossi mancanti". Se il tuo livello rimane rosso, significa che lo sta effettivamente rasterizzando ogni fotogramma.

+0

Cosa farebbe diventare rosso? Stai esaurendo la memoria della GPU? – jjxtra

+0

O quello, o che il livello è stato reso nuovamente e quindi la cache viene invalidata. – NachoSoto

Problemi correlati