Eu estou usando MBProgressHUD
para exibir uma animação “ocupado” para usar o usuário enquanto um UITableView está sendo preenchido. O UITableView
bloqueia o thread principal para que a animação não apareça até que a tabela termine de carregar.
Existe uma maneira de fazer a animação ocupada executar em outro segmento enquanto o UITableView
ocupa o thread principal?
O UIKit faz seu desenho quando o loop de execução completa o ciclo atual. Em outras palavras, se você estiver configurando uma visualização (por exemplo, MBProgressHUD), as alterações não serão visíveis até a próxima iteração do loop de execução. Portanto, se você não permitir que o loop de execução gire bloqueando o thread principal, as alterações da interface do usuário não aparecerão imediatamente.
Se você não puder fazer o seu trabalho em um thread de segundo plano, você precisa permitir que o loop de execução complete seu ciclo antes de iniciar sua tarefa de bloqueio de longa duração no thread principal.
Você pode fazer isso agendando a execução na próxima iteração do loop de execução.
// Setup and show HUD here [self performSelector:@selector(myTask) withObject:nil afterDelay:0.001];
Esconda o HUD no final do myTask. Ou você pode executar o loop de execução manualmente.
// Setup and show HUD here [[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantPast]]; // Insert myTask code here // Hide the shown HUD here
Ou (se você pode usar blocos)
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.001 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void){ // Insert myTask code here });