ios - 立即显示 subview /等到 View 可见后再继续

标签 ios

我有一个启动到标签栏 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/

相关文章:

ios - 如何制作适用于 IPAD 3 的 UIBlurEffect

ios - Runner.app/Runner.app/...无限循环Xcode构建失败

ios - 如何解析 NSString

ios - Xcode UIView 没有边框颜色等成员

ios - 创建保持在顶部的叠加 View 的好方法是什么?

ios - 为什么我的动画不流畅?

ios - 在 applicationWillResignActive 或 applicationDidEnterBackground 上暂停套接字连接?

ios - willEnterForeground 随机重启应用

ios - swift shouldPerformSegueWithIdentifier 异步获取数据

ios - @IBDesignable - View 未按预期呈现