svprogresshud progresshud cocoa-touch uitableview mbprogresshud

cocoa touch - svprogresshud - Ejecutar MBProgressHUD en otro hilo?



progresshud swift 4 (1)

Estoy usando MBProgressHUD para mostrar una animación "ocupada" para usar el usuario mientras se está llenando un UITableView. El UITableView bloquea el hilo principal, por lo que la animación ni siquiera aparece hasta que la tabla termina de cargarse.

¿Hay alguna manera de hacer que la animación ocupada se ejecute en otro subproceso mientras el UITableView ocupa el subproceso principal?


UIKit hace su dibujo cuando el ciclo de ejecución completa el ciclo actual. En otras palabras, si está configurando una vista (por ejemplo, MBProgressHUD), los cambios no serán visibles hasta la próxima iteración del bucle de ejecución. Por lo tanto, si no permite que el bucle de ejecución gire al bloquear el hilo principal, los cambios en la interfaz de usuario no aparecerán de inmediato.

Si no puede realizar su trabajo en un subproceso en segundo plano, debe permitir que el ciclo de ejecución complete su ciclo antes de comenzar su tarea de bloqueo de larga ejecución en el subproceso principal.

Puede hacer esto programando la ejecución en la siguiente iteración del bucle de ejecución.

// Setup and show HUD here [self performSelector:@selector(myTask) withObject:nil afterDelay:0.001];

Ocultar el HUD al final de myTask. O puede ejecutar el bucle de ejecución manualmente.

// Setup and show HUD here [[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantPast]]; // Insert myTask code here // Hide the shown HUD here

O (si puedes usar bloques)

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.001 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void){ // Insert myTask code here });