我有一个如此沉重的视图,需要两秒或更长时间才能加载。我想显示活动指示器,同时在viewDidLoad上携带所有东西,然后隐藏它。有人可以指导我这样做吗?提前谢谢。
答案 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];
这将起作用