UIActivityIndicatorView non mostrare fino a dopo il caricamento fatto
-
28-09-2019 - |
Domanda
Ho un pulsante sul momento navigato a viewcontroller, collegato ad un IBAction.
Nel IBAction creo un UIActivityIndicatorView come al solito, con [addSubView self.view], quindi caricare alcune immagini.
Ho provato setNeedsDisplay sulla vista indicatore, il controller della vista, e la finestra, ma carica ancora le immagini prima di mostrare l'indicatore, che naturalmente è del tutto inutile per me.
Quindi sto cercando un modo per sia la forza di un ridisegno istante (che quando penso che un po 'di più è improbabile che possa rendere il lavoro), o un modo per caricare le immagini dopo che l'indicatore è apparso, o un modo per lanciare un thread separato o simili per avviare l'animazione / visualizzare l'indicatore, o mettere l'indicatore in un viewcontroller separata e in qualche modo forzarlo per aggiungere / si mostra prima di passare alla foto-carico.
Raccomandazioni?
Soluzione
Quello che faccio in questa situazione è generare un nuovo thread, che libera il thread principale per l'interazione maniglia UI mentre roba è il caricamento in background.
Prima visualizza UIActivityIndicatorView
, quindi generare un nuovo filo che carica le immagini, quindi sull'ultima riga del metodo che viene eseguito nel nuovo filo, nascondere il UIActivityIndicatorView
.
Ecco un esempio:
//do stuff...
[activityIndicatorView startAnimating];
[NSThread detachNewThreadSelector:@selector(loadImages) toTarget:self withObject:nil];
Nel tuo metodo loadImages
:
- (void) loadImages {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
//load images...
[activityIndicatorView performSelectorOnMainThread:@selector(stopAnimating)];
[pool drain];
}