cocoa-touch - 在另一个线程中运行 MBProgressHUD?

标签 cocoa-touch uitableview mbprogresshud

我正在使用 MBProgressHUD在填充 UITableView 时显示“忙碌”动画以使用用户。 UITableView阻塞主线程,因此动画在表格完成加载之前甚至不会出现。

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

最佳答案

UIKit 在运行循环完成当前循环时进行绘制。换句话说,如果您正在配置 View (例如 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

或者(如果你可以使用 block )
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.001 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void){
    // Insert myTask code here
});

关于cocoa-touch - 在另一个线程中运行 MBProgressHUD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5685331/

相关文章:

c# - ProgressHUD 和 TouchUpInside

iphone - 通过我的 iPhone 应用启动 Guitar Pro

ios - Xcode - 如何修复 'NSUnknownKeyException',原因 : … this class is not key value coding-compliant for the key X"error?

objective-c - 在 UITableViews 和 View 之间导航并保留数据?

ios - 选择表格 View 单元格中的文本并返回到上一个 View

ios - 带有多行的ios中的Toast消息

ios - 将 MBProgressHUD 定位在屏幕的底部/顶部

objective-c - 为什么我不必释放这些对象?

ios - Skobbler SKMapView 和 UIPanGestureRecognizer

objective-c - 非常奇怪的 UITableView tableFooterView 行为