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



所以我正在尝试在我的应用程序中创建一个加载屏幕。我有一个需要 3-10 秒才能加载的视图。在此期间,我想显示我制作的 UIView,它只是黑色的加载屏幕。目前,我将我的代码放在 viewDidLoad 函数中,就在超级 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; 

这工作并完全按照我想要的方式在一切之上创建我的视图,但是这会等到我的主视图完全加载完成后才能实际显示任何内容。viewDidLoad 不是放置这个的好地方吗,如果是这样,我应该把它放在哪里。

简单地

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

您需要在

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

不要忘记

在冗长的工作完成后调度回主线程。 所有 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;
    });
});
UIView* baseView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
[self.view addSubview:baseView];
[baseView setBackgroundColor:[UIColor blackColor]];
[self.view bringSubviewToFront:baseView];
baseView.layer.zPosition = 1; 
//Create new dispatch for load data
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
    // Load data in here
    // Call main thread to update UI
    dispatch_async(dispatch_get_main_queue(), ^{
        baseView.hidden = YES;
    });
});

最新更新