Domanda

Sto usando un sacco di CALayer, creando un'immagine basata su un riquadro non diversamente da GoogleMaps (diverse versioni della stessa immagine con più / meno dettagli).

Il codice che sto usando per fare questo è:

UIImage* image = [self loadImage:obj.fileName zoomLevel:obj.zoomLevel];
[CATransaction setValue:(id)kCFBooleanTrue
                 forKey:kCATransactionDisableActions];
obj.layerToAddTo.contents = [image CGImage];
[CATransaction commit];

Non ho davvero voglia di caricare il CGImage dal file usando CoreGraphics perché sono pigro. Ma lo farò se c'è un grande aumento delle prestazioni! LoadImage si limita a manipolare una stringa per ottenere il percorso giusto per caricare detta immagine e obj è una struttura NSObject che contiene tutte le informazioni di cui ho bisogno per questo thread.

Aiuto?

È stato utile?

Soluzione

Non c'è un grande aumento delle prestazioni - semmai è il contrario. Passando a UIImage per caricare le tue immagini, otterrai tutti i vantaggi della memorizzazione nella cache che fa per te e sarà una creatura molto veloce da usare con i tuoi vari CALayer.

Altri suggerimenti

Ho appena provato questo e usare CoreGraphics puro per caricare l'immagine invece di usare UIImage ha dato un notevole miglioramento della velocità quando si caricavano molte immagini in una volta sola.

" Ho appena provato questo e usare CoreGraphics puro per caricare l'immagine piuttosto che usare UIImage ha dato un notevole miglioramento della velocità quando si caricano molte immagini in una volta sola. "

Come hai evitato di usare un UIImage? O più precisamente, come si carica un file di immagine direttamente in CoreGraphics senza passare attraverso un UIImage?

Uno dei motivi per cui NON utilizzare UIImage -imageNamed: per caricare le immagini è che sono archiviate nella cache interna e che la cache non viene cancellata in situazioni di memoria insufficiente.

Non ho una risposta definitiva ma immagino che vedresti un tempo di caricamento più lento quando usi UIImage di quanto vedresti quando usi CGImage. Con CGImage, si specifica il tipo di immagine (jpg o png) durante la creazione, ma con UIImage, il tipo di oggetto deve essere determinato in modo dinamico. Certo, questo è probabilmente semplice come guardare i primi byte del file immagine, ma potrebbe non esserlo.

Una volta che l'immagine è effettivamente in uso, non immaginerei che ci sarebbe alcuna differenza tra l'uso del CGImage che rappresenta internamente un UIImage rispetto all'utilizzo di un CGImage creato da te. Penso che sarebbero esattamente equivalenti.

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