在我的应用程序中,我正在提取用户可供选择的食谱列表。屏幕下载大约10个要显示的图像,这会导致应用程序在显示所有内容之前需要一些时间来加载。屏幕冻结中间开关约5秒钟,然后显示配方。我需要知道是否有某种方法可以设置“加载”屏幕,以便切换不可见。我用谷歌搜索它并没有得到满意的结果,因为大多数结果都与应用程序首次打开时的加载屏幕有关。对我有什么想法吗?
修改
要添加更多细节,我已经尝试在第一个上添加一个视图控制器,并在屏幕加载完成后将其删除。这仍然冻结,直到下面的一个加载。我不确定从哪里开始,所以任何进一步阅读的建议或任何有用的建议
答案 0 :(得分:2)
使用食谱在视图控制器上放置活动指示器:
self.activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
self.activityIndicator.frame = CGRectMake(40.0, 20.0, 100.0, 100.0);
self.activityIndicator.center = self.view.center;
然后当它应该启动时,启动它并将其添加到主视图中:
self.activityIndicator.hidden = NO;
[self.activityIndicator startAnimating];
[self.view addSubview:self.activityIndicator];
加载数据后,停止并删除活动指示符:
[self.activityIndicator stopAnimating];
[self.activityIndicator removeFromSuperview];
答案 1 :(得分:1)
我会异步下载图像并显示UIActivityIndicatorView。这将向用户显示应用程序未被冻结,因为指示器将旋转,并且由于您异步下载图像,因此主线程不会被锁定。
在提出问题之前,还要尝试做一些认真的研究,其他人有可能遇到同样的问题。看看这个答案,它与你想要做的类似。
How to UIActivityIndicatorView during perform segue?
编辑:
为了在下载所有图像时删除视图:
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
^{
//download your images
});
dispatch_group_notify(group, dispatch_get_main_queue(),
^{
//images have downloaded, end uiactivityindicator, segue to the next view
});