Differenze di prestazioni dell'iPhone nel disegno al quarzo rispetto alle immagini pre-cotte (che immagino semplifichino al quarzo rispetto al quarzo)

StackOverflow https://stackoverflow.com/questions/1604341

Domanda

Nuovo per Quartz e sono curioso di conoscere la velocità di disegno di forme semplici, sfumature e ombre; confrontando specificamente le funzioni di disegno al quarzo con il disegno di immagini al quarzo su iPhone.

Di 'che devo disegnare un rettangolo pieno, tratteggiato e ombreggiato. Suppongo che importare un rettangolo pre-cotto come PNG e disegnarlo usando drawInRect: o drawAtPoint: sia più veloce dell'uso delle funzioni di disegno di Quartz per disegnare la stessa cosa, poiché quest'ultima richiede calcoli espliciti. D'altra parte, disegnare un'immagine presumo aumenta l'uso della memoria e le dimensioni dell'applicazione poiché devo importare l'immagine e quindi allocarla. Suona bene?

Oltre a ciò, ci sono grandi vantaggi / svantaggi per entrambe le tecniche? Come qualcuno che ha molta familiarità con i programmi di grafica e che è nuovo di zecca su Quartz, sto provando a decidere se ci sono dei vantaggi nell'usare le funzioni di disegno nel mio codice invece di pre-cuocere l'intera UI e importare le immagini.

È stato utile?

Soluzione

Avevo una domanda simile, quindi ho verificato i diversi approcci. Nella maggior parte dei casi di disegno semplici (come nell'esempio del rettangolo), il caricamento di un'immagine dal disco sembrava essere leggermente più lento rispetto al disegno di uno, forse a causa dell'accesso al disco richiesto. In quei casi, ho deciso di usare le routine di disegno al quarzo, semplicemente per la flessibilità che mi danno. Se in futuro volessi modificare le dimensioni di un elemento dell'interfaccia utente (forse per supportare una risoluzione più grande o più alta), avrei bisogno di ri-renderizzare tutte le mie immagini, dove i disegni vettoriali si ridimensioneranno secondo necessità.

Un'area in cui ho visto una prestazione significativa vincere è per un grande gradiente radiale che disegno come sfondo. In Shark, ho visto che la chiamata CGContextDrawRadialGradient () stava consumando molto tempo della CPU. Quando ho sostituito il gradiente radiale disegnato al quarzo con un'immagine statica, ho notato una notevole riduzione del tempo di avvio dell'applicazione (questo sfondo viene inserito all'avvio dell'applicazione). Stranamente, ho visto anche una riduzione dell'utilizzo della memoria dell'applicazione di circa 0,5 MB, che non posso spiegare completamente.

Se vuoi testarlo da solo, ti consiglio vivamente di prendere l'editor di immagini Opacità , che può generare Codice al quarzo per un disegno (inclusa una sottoclasse UIView o CALayer completa), nonché output di un PNG dello stesso disegno. Ciò rende banale implementare entrambi i percorsi all'interno dell'applicazione e testarli.

Altri suggerimenti

C'è anche una via di mezzo che potrebbe funzionare, a seconda della struttura dell'applicazione: implementare il codice di disegno, ma disegnare in un livello, quindi riutilizzarlo. Questo ha il vantaggio di non masticare il tempo della CPU più di una volta, ma di mantenere dinamico il processo di disegno

Quindi, diciamo, quando finalmente The Tablet viene spedito (da un giorno all'altro !!), puoi rielaborare un po 'i parametri di disegno per coprire tutti i possibili dispositivi, piuttosto che generare un mucchio di diverse immagini statiche.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top