0

我的视图太重了,需要两秒钟或更长时间才能加载。我想在 viewDidLoad 携带所有东西的同时显示活动指示器,然后将其隐藏。有人可以指导我这样做吗?提前致谢。

4

5 回答 5

3

试试 Matej Bukovinski 的 MBProgressHUD。

https://github.com/matej/MBProgressHUD

在后台获取数据

HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];
[self.navigationController.view addSubview:HUD];
HUD.delegate = self;
HUD.labelText = @"Loading";
[HUD showWhileExecuting:@selector(getStartupData:)
               onTarget:self
             withObject:nil
               animated:YES]

如果您想在主线程中获取数据,只需显示 HUD,然后在收到通知时将其关闭。

HUD = [[MBProgressHUD alloc] initWithView:self.tableView];
[self.tableView addSubview:HUD];
HUD.labelText = @"Loading";
HUD.tag = 998;
[HUD show:YES];
[HUD release];
于 2011-02-17T09:23:55.773 回答
1

我不确定,但我怀疑是否可以在后台线程上运行 viewDidLoad。如果这是真的,则在运行 viewDidLoad 时无法为活动指示器设置动画。

所以如果我是你,我会弄清楚 viewDidLoad 需要这么长时间的原因,并将其放入可以在后台运行的方法中。

然后在您的 viewWillAppear 方法中添加一个活动指示器视图,并在您的后台任务完成时将其删除。

根据您在 viewDidLoad 中所做的事情,这可能需要大量重构和添加委托方法。
我猜你正在下载应该显示的东西。

于 2011-02-17T08:43:50.250 回答
1

您可以在 viewDidLoad 中非常简单地执行此操作

UIAactivityIndicatorView *  date  = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(150, 150, 30, 30)];
[date setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleGray];
[self.view addsubview:date];
[date startAnimating];

加载页面视图后,您可以通过 [date stopAnimating] 停止为 Acitivity 指示器设置动画;

这会起作用

于 2011-02-17T13:37:16.307 回答
1

尝试将需要很长时间的内容移到 viewDidAppear 中。然后,您可以使用活动指示器创建一个新视图并使其可见(在界面构建器中最简单),一旦您完成所有工作,只需调用:

[loadingView setHidden:YES];

祝你好运

于 2011-02-17T09:06:21.870 回答
1

放入[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];调用慢速加载视图控制器的视图,如果慢速启动器是初始视图,则放入 appDidFinishLoading。

此外,考虑将需要很长时间的活动从主线程移至后台线程,以保持 GUI 始终响应。

于 2011-02-17T09:13:17.060 回答