2011-11-25 15 views
7

Probabilmente sarò la stessa domanda che è stato chiesto da altra persona (ma non ha risposte):
Speed up first UIImageView animation (force cache the images)

Ma, la mia domanda è: a breve
ho 60 immagini in risorse, in TimeInterval ciclo I animerò quelle immagini, ogni volta impostando su UIImageView.image l'immagine n'1 da resouce.

Il problema è: prima animazione è male! Quando eseguo nuovamente il ciclo di tutte le immagini nello stesso UIImageView, l'animazione è perfetta. Possiamo pre memorizzare le immagini in UIImageView?

MODIFICA: O forse possiamo fare qualche trucco, per rendere l'animazione regolare?Le immagini della cache di UIImageView?

risposta

17

Procedimento [UIImage imageNamed:@""] cache l'immagine. UIImageView non lo fa. Ho avuto un problema in un'app con molte immagini che si bloccavano a causa della poca memoria. Da correggere se ho cambiato in [UIImage imageWithContentsOfFile:@""] che non memorizza l'immagine nella cache.

Per pre-memorizzare l'immagine, è sufficiente chiamare [UIImage imageNamed:@""] per tutte le immagini desiderate nel metodo init. Ma se ricevi un avvertimento di memoria, le immagini saranno deallocate.

+0

Forse, ma parliamo di UIImageView, non di UIImage – beryllium

+0

Siamo spiacenti. Risolta la risposta. –

+0

SÌ! Durante l'app di profilazione con l'uso di 'imageNamed', la mia app ha una memoria di 120 MB, quando la memoria' imageWithContentsOfFile' usata è 15mb.Ma sfortunatamente non risolve il problema di animazione brutto ( –

2

No, UIImageView non memorizza nella cache le immagini. image proprietà dichiarata come mantenuta, quindi quando si imposta la nuova immagine, quindi imageView invia il messaggio release alla vecchia immagine e retain a quello nuovo.

Il modo più semplice per animare UIImageView è impostare serie di immagini di proprietà animationImages e chiamare startAnimating metodo

imageView.animationImages = [NSArray arrayWithObjects:[UIImage imageNamed:@"1.png"], ..., nil]; 
imageView.animationDuration = 2.0f; 
[imageView startAnimating]; 
+0

Ma, hai mai provato ad animare 100 immagini, ciascuna con dimensioni 850x535 usando UIImageView.animationImages? L'ho provato, l'app si è bloccata a causa della memoria .. La ragione per cui penso è, perché animationImages contiene tutte le immagini, che sono un sacco di memoria. O, sto dicendo qualcosa di sbagliato ?? Se è così, per favore correggimi. Thx –

+0

Sì, immagino che tu abbia esattamente ragione. In questo modo è più semplice, ma non efficiente come puoi vedere. – beryllium

+0

Cosa pensi, dovrei usare qualche libreria grafica per giocare con immagini grandi, mantenendo le prestazioni buone? Conosci qualche? Thx –

4

UIImageView non memorizza nella cache l'immagine, come fa [UIImage imageNamed:@""]. Sfortunatamente, se hai molte immagini, imageNamed bloccherà la tua applicazione perché esaurisce la memoria.

È possibile precaricare tutte le immagini in un NSArray utilizzando [UIImage imageWithContensOfFile:@""]. Una volta che hai la matrice, puoi fare quello che vuoi!

+1

Penso che sia strano! .. NSArray manterrà anche la memoria delle immagini dentro di sé, così come le immagini memorizzate nella cache da imageNamed. O? –

Problemi correlati