7

Ho un pulsante sul navigatore attualmente navigato per viewcontroller, collegato a un IBAction.UIActivityIndicatorView non visualizzato fino a dopo il caricamento completato

Nell'IBAction creo un UIActivityIndicatorView come al solito, con [self.view addSubView], quindi carica alcune immagini.

Ho provato setNeedsDisplay nella vista indicatore, il controller di visualizzazione e la finestra, ma carica ancora le immagini prima di mostrare l'indicatore, che ovviamente è del tutto inutile per me.

Quindi sto cercando un modo per forzare un ridisegno istantaneo (che quando penso che un po 'di più è improbabile che funzioni), o un modo per caricare le immagini dopo che l'indicatore è apparso, o un modo di avviare un thread separato o simile per avviare l'animazione/mostrare l'indicatore, o mettere l'indicatore in un viewcontroller separato e in qualche modo forzarlo ad aggiungere/mostrare se stesso prima di passare al caricamento delle immagini.

Raccomandazioni?

risposta

18

Quello che faccio in questa situazione è generare un nuovo thread, che libera il thread principale per gestire l'interazione dell'interfaccia utente mentre roba viene caricata in background.

Per prima cosa mostrare lo UIActivityIndicatorView, quindi generare un nuovo thread che carica le immagini, quindi sull'ultima riga del metodo che viene eseguita nel nuovo thread, nascondere UIActivityIndicatorView.

Ecco un esempio:

//do stuff... 
[activityIndicatorView startAnimating]; 
[NSThread detachNewThreadSelector:@selector(loadImages) toTarget:self withObject:nil]; 

nel metodo loadImages:

- (void) loadImages { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    //load images... 
    [activityIndicatorView performSelectorOnMainThread:@selector(stopAnimating)]; 
    [pool drain]; 
} 
+0

Grazie, ha funzionato come un fascino! Ed è semplice e utile per un one-off come questo. Qualche suggerimento su come pensare quando metterlo in uso in un'app più pesante con un sacco di caricamento e thread? –

+1

+1 crea una discussione! Bella risposta. – jv42

+1

Vorrei poter sopravvivere questo milione di volte. – Mason