我的视图太重了,需要两秒钟或更长时间才能加载。我想在 viewDidLoad 携带所有东西的同时显示活动指示器,然后将其隐藏。有人可以指导我这样做吗?提前致谢。
5 回答
试试 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];
我不确定,但我怀疑是否可以在后台线程上运行 viewDidLoad。如果这是真的,则在运行 viewDidLoad 时无法为活动指示器设置动画。
所以如果我是你,我会弄清楚 viewDidLoad 需要这么长时间的原因,并将其放入可以在后台运行的方法中。
然后在您的 viewWillAppear 方法中添加一个活动指示器视图,并在您的后台任务完成时将其删除。
根据您在 viewDidLoad 中所做的事情,这可能需要大量重构和添加委托方法。
我猜你正在下载应该显示的东西。
您可以在 viewDidLoad 中非常简单地执行此操作
UIAactivityIndicatorView * date = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(150, 150, 30, 30)];
[date setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleGray];
[self.view addsubview:date];
[date startAnimating];
加载页面视图后,您可以通过 [date stopAnimating] 停止为 Acitivity 指示器设置动画;
这会起作用
尝试将需要很长时间的内容移到 viewDidAppear 中。然后,您可以使用活动指示器创建一个新视图并使其可见(在界面构建器中最简单),一旦您完成所有工作,只需调用:
[loadingView setHidden:YES];
祝你好运
放入[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
调用慢速加载视图控制器的视图,如果慢速启动器是初始视图,则放入 appDidFinishLoading。
此外,考虑将需要很长时间的活动从主线程移至后台线程,以保持 GUI 始终响应。