在另一个线程中运行MBProgressHUD?

Nip*_*rus 18 cocoa-touch uitableview mbprogresshud

我正在使用MBProgressHUD显示"忙"动画来在使用UITableView时使用用户.该UITableView块主线程使动画甚至不出现,直到表加载完毕.

有没有办法让UITableView占用主线程的繁忙动画在另一个线程上运行?

Mat*_*ski 40

当运行循环完成当前循环时,UIKit会执行绘图.换句话说,如果您正在配置视图(例如,MBProgressHUD),则在下一次运行循环迭代之前,更改将不可见.因此,如果您不通过阻止主线程来允许运行循环旋转,则UI更改将不会立即显示.

如果您无法在后台线程上完成工作,则需要在主线程上启动长时间运行的阻塞任务之前允许运行循环完成其循环.

您可以通过在下一个运行循环迭代中安排执行来完成此操作.

// Setup and show HUD here

[self performSelector:@selector(myTask) withObject:nil afterDelay:0.001];
Run Code Online (Sandbox Code Playgroud)

在myTask的末尾隐藏HUD.或者您可以手动运行运行循环.

// Setup and show HUD here

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantPast]];

// Insert myTask code here
// Hide the shown HUD here
Run Code Online (Sandbox Code Playgroud)

或者(如果你可以使用块)

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