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
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.
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];
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 –
Sì, immagino che tu abbia esattamente ragione. In questo modo è più semplice, ma non efficiente come puoi vedere. – beryllium
Cosa pensi, dovrei usare qualche libreria grafica per giocare con immagini grandi, mantenendo le prestazioni buone? Conosci qualche? Thx –
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!
Penso che sia strano! .. NSArray manterrà anche la memoria delle immagini dentro di sé, così come le immagini memorizzate nella cache da imageNamed. O? –
Forse, ma parliamo di UIImageView, non di UIImage – beryllium
Siamo spiacenti. Risolta la risposta. –
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 ( –