ios - 在等待主视图加载时显示 UIView?

标签 ios objective-c xcode uiview xib

所以我试图在我的应用程序中创建一些加载屏幕。我有一个 View 需要 3-10 秒才能加载。在此期间,我想显示一个我制作的 UIView,它只是带有加载屏幕的黑色。目前我将我的代码放在 viewDidLoad 函数中,就在 super viewDidLoad 之后。这是我的代码

UIView* baseView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
[self.view addSubview:baseView];
[baseView setBackgroundColor:[UIColor blackColor]];
[self.view bringSubviewToFront:baseView];
baseView.layer.zPosition = 1; 

这有效并创建了我的 View ,完全按照我想要的方式覆盖所有内容,但是这会等到我的主视图完全加载完毕,然后才会真正显示任何内容。 viewDidLoad 不是放置它的好地方吗?如果是,我应该把它放在哪里。

简单地说,我有一个非常基本的 UIView,我想在等待实际 View 加载时加载它,然后简单地隐藏它。任何想法如何做到这一点?

最佳答案

您需要在另一个线程上分派(dispatch)您的辛勤工作,否则操作系统将等到所有过程完成后再刷新 UI(这就是为什么您看到加载屏幕仅在 3-10 秒后出现)。

不要忘记在冗长的工作完成后分派(dispatch)回主线程。所有 UI 更新都必须在主线程上完成。

self.loadingView.hidden = NO;
// Dispatch lengthy stuff on another thread
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
    // Do lengthy stuff here

    // Dispatch back on the main thread (mandatory for UI updates)
    dispatch_async(dispatch_get_main_queue(), ^{
        self.loadingView.hidden = YES;
    });
});

关于ios - 在等待主视图加载时显示 UIView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29885743/

相关文章:

objective-c - 关于 NSUserDefaults 的问题/问题

c++ - 使用 Xcode 编译 C++ 代码时出现问题

ios - 函数 'AudioServicesPlaySystemSoundWithVibration'的隐式声明在c99中无效

ios - 删除第一个注释-MapView iOS

ios - SDwebimage EXC_BAD_ACCESS

ios - 如何使用 UIPickerView 的选定值作为通知的时间间隔?

objective-c - 将 iPhone 应用程序转换为 iPad,然后在 iPad 中使用 splitview?

iOS10 - userNotificationCenter didReceiveNotificationResponse 调用延迟 10 秒

iphone - 如何使用 NSURLRequest 访问 WebDynpro 页面

ios - 隐藏导航栏但保留后退按钮 - SwiftUI