所以我试图在我的应用程序中创建一些加载屏幕。我有一个视图,需要3-10秒加载。在这段时间里,我想要显示一个UIView,我制作的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;
这可以工作并创建我的视图超越我想要的一切,但是等到我的主视图完全完成加载才真正显示任何内容。 viewDidLoad不是放置它的好地方,如果是这样,我应该把它放在哪里。
简单地说,我有一个非常基本的UIView,我想加载,而我等待实际视图加载,然后只是隐藏它。任何想法如何做到这一点?
答案 0 :(得分:2)
您需要在另一个线程上调度您的辛勤工作,否则操作系统将等到所有过程完成后再刷新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;
});
});
答案 1 :(得分:0)
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;
});
});