7

Tengo un botón en el navegador actualmente navegado para ver, conectado a un IBAction.UIActivityIndicatorView no se muestra hasta después de la carga realizada

En IBAction creo un UIActivityIndicatorView como de costumbre, con [self.view addSubView], luego cargo algunas imágenes.

He intentado configurarNeedsDisplay en la vista del indicador, el controlador de la vista y la ventana, pero todavía carga las imágenes antes de mostrar el indicador, lo que por supuesto es bastante inútil para mí.

Así que estoy buscando una forma de forzar un redibujado instantáneo (que cuando creo que es poco probable que funcione), o una forma de cargar las imágenes después de que el indicador haya aparecido, o una forma de lanzar un hilo por separado o similar para comenzar a animar/mostrar el indicador, o poner el indicador en un controlador de vista separado y de alguna manera obligarlo a agregarse/mostrarse antes de pasar a la carga de imágenes.

Recomendaciones?

Respuesta

18

Lo que hago en esta situación es engendrar un nuevo hilo, que libera el hilo principal para manejar la interacción de UI mientras el material se carga en segundo plano.

Primero muestre el UIActivityIndicatorView, luego engendre un nuevo hilo que cargue las imágenes, luego en la última línea del método que se ejecuta en el nuevo hilo, oculte el UIActivityIndicatorView.

He aquí un ejemplo:

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

En el método de loadImages:

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

Gracias, funcionó como un encanto! Y es simple y útil para una sola vez como esta. ¿Algún consejo sobre cómo pensar al usarlo en una aplicación más pesada con muchas cargas e hilos? –

+1

+1 crear un hilo! Buena respuesta. – jv42

+1

Ojalá pudiera votar esto un millón de veces. – Mason

Cuestiones relacionadas