我正在使用MBProgressHUD
在填充 UITableView 时显示“忙碌”动画以使用用户。阻塞主UITableView
线程,因此动画在表格完成加载之前甚至不会出现。
有没有办法让繁忙的动画在UITableView
占用主线程时在另一个线程上运行?
我正在使用MBProgressHUD
在填充 UITableView 时显示“忙碌”动画以使用用户。阻塞主UITableView
线程,因此动画在表格完成加载之前甚至不会出现。
有没有办法让繁忙的动画在UITableView
占用主线程时在另一个线程上运行?
UIKit 在运行循环完成当前循环时进行绘制。换句话说,如果您正在配置视图(例如,MBProgressHUD),则更改将在下一次运行循环迭代之前不可见。因此,如果您不允许通过阻塞主线程来旋转运行循环,则 UI 更改不会立即出现。
如果你不能在后台线程上做你的工作,你需要让运行循环完成它的循环,然后再在主线程上开始你的长时间运行的阻塞任务。
您可以通过在下一次运行循环迭代中安排执行来做到这一点。
// Setup and show HUD here
[self performSelector:@selector(myTask) withObject:nil afterDelay:0.001];
在 myTask 结束时隐藏 HUD。或者您可以手动运行运行循环。
// Setup and show HUD here
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantPast]];
// Insert myTask code here
// Hide the shown HUD here
或者(如果你可以使用块)
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.001 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void){
// Insert myTask code here
});