(Iphone Sdk)如何在视图控制器加载时显示动画活动指示器?

时间:2011-02-17 08:27:26

标签: iphone sdk uiactivityindicatorview

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

5 个答案:

答案 0 :(得分: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];

答案 1 :(得分:1)

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

所以,如果我是你,我会弄清楚viewDidLoad需要这么长时间,并把它放到一个可以在后台运行的方法中。

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

根据您在viewDidLoad中执行的操作,这可能需要大量重构和添加委托方法。
我想你正在下载应该显示的东西。

答案 2 :(得分:1)

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

[loadingView setHidden:YES];
祝你好运

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

你可以非常简单地做到这一点     在viewDidLoad

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

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

这将起作用