我有一个启动到标签栏 Controller 的应用程序。当应用程序启动或从后台返回时,它会检查服务器以获取其数据更新。如果更新可用,可能需要几秒钟来获取数据并进行更新。
我想简单地呈现一个覆盖 View ,告诉用户应用程序的数据正在更新,请稍等几秒钟。我尝试这样做的方式如下:在我负责更新的类(class)中:
AppDelegate *delegate = [UIApplication sharedApplication].delegate;
[delegate.tabBarController.selectedViewController.view addSubview:updatingDataView];
[self runUpdateMethods];
问题是只有在更新方法完成后,updatingDataView 才会出现在屏幕上。如何让它在更新方法开始之前出现?
最佳答案
看起来您正在主线程上运行 [self runUpdateMethods];
(这将阻止您的 UI 更新)。您可能希望在后台线程上运行它。像这样的东西:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0),
^{
[self runUpdateMethods];
});
或
[self performSelectorInBackground:@selector(runUpdateMethods) withObject:nil];
更新
因为你想在 [self runUpdateMethods];
完成后做一些事情,你会想做这样的事情:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0),
^{
[self runUpdateMethods];
dispatch_async(dispatch_get_main_queue(), ^{
[self doSomethingAfterUpdate];
});
});
这样做仍然能让您知道 runUpdateMethods
何时返回并且不会挂起 UI。
关于ios - 立即显示 subview /等到 View 可见后再继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12165623/