如何在iOS中切换屏幕时创建加载屏幕

时间:2014-11-10 18:58:37

标签: ios objective-c loading

在我的应用程序中,我正在提取用户可供选择的食谱列表。屏幕下载大约10个要显示的图像,这会导致应用程序在显示所有内容之前需要一些时间来加载。屏幕冻结中间开关约5秒钟,然后显示配方。我需要知道是否有某种方法可以设置“加载”屏幕,以便切换不可见。我用谷歌搜索它并没有得到满意的结果,因为大多数结果都与应用程序首次打开时的加载屏幕有关。对我有什么想法吗?

修改

要添加更多细节,我已经尝试在第一个上添加一个视图控制器,并在屏幕加载完成后将其删除。这仍然冻结,直到下面的一个加载。我不确定从哪里开始,所以任何进一步阅读的建议或任何有用的建议

2 个答案:

答案 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)

我会异步下载图像并显示UIActivityIndi​​catorView。这将向用户显示应用程序未被冻结,因为指示器将旋转,并且由于您异步下载图像,因此主线程不会被锁定。

在提出问题之前,还要尝试做一些认真的研究,其他人有可能遇到同样的问题。看看这个答案,它与你想要做的类似。

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

                      });