Domanda

Temo che questo sia un codice malvagio:

CGRect iRect = CGRectMake(0.0f, 0.0f, 320.0f, 400.0f);
UIImageView *imgView = [[UIImageView alloc] initWithFrame:iRect];
imgView.animationImages = [NSArray arrayWithObjects:
                [UIImage imageNamed:@"b0001.png"],
                [UIImage imageNamed:@"b0002.png"],
                // 150 more
                [UIImage imageNamed:@"b0152.png"],
                nil];

Ricordo leggermente che imageNamed: is evil. Se lo faccio in questo modo e devo fornire oggetti UIImage, allora quegli oggetti UIImage caricano immediatamente quei file di immagine in memoria, giusto? E, a parte questo, tutti quei 152 oggetti UIImage grossi prendono una grande pausa nella memoria perché sono rilasciati automaticamente, vero?

Quindi, in conclusione, usare questa tecnica fa schifo. Vero? Non lo so. Sul mio vecchio iPod touch di prima generazione, questo sembra funzionare senza ritardi a 25 fps. Molto liscia e piacevole. L'unica cosa di cui ho paura è che alcuni altri dispositivi potrebbero pensarla diversamente. Anche se ho l'ipod touch programmabile più debole disponibile.

Comunque, qualcuno vede qualche possibilità di miglioramento lì? O non dovrei usarlo e usare setImage: di UIImageView in un proprio algoritmo che carica e imposta quelle immagini con selettori ritardati usando quell'immagine grossa Con cosa oggettoContentsOfFile (può essere chiamato diverso), senza rilascio automatico? Forse un ragazzo intelligente ha scritto un po 'di lib per i video di pollice ad alte prestazioni che consistono in sequenze di immagini?

(no, il video non è un'opzione sull'iPhone; i framework apple per questo supportano solo lo schermo intero e non conosco nient'altro che lo farebbe)

È stato utile?

Soluzione

Starei lontano dal tentativo di caricare così tante immagini in un array UIImageView. Una domanda simile è stata posta qui . Il metodo di buffering che descrivo qui dovrebbe applicarsi anche alla tua situazione.

Altri suggerimenti

Hai ragione su imageNamed ... non dovresti usarlo in molti casi poiché memorizza nella cache internamente l'immagine. Usa:

[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image1" ofType:@"png"];

L'unica volta che vuoi usare imageNamed è quando

1) Stai riutilizzando un'icona più e più volte (visualizzazioni di tabelle ecc ...)
2) Non hai implementato il tuo sistema di memorizzazione nella cache

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