【发布时间】:2012-08-27 15:07:52
【问题描述】:
在我的 UIViewController 的 loadView 方法中,我启动了一个 UIActivityIndicator。稍后在 loadView 中,我加载了一个复杂的 UIView,加载大约需要 2-3 秒。 (UIScrollView 有很多更具体的图片)。我的问题是 UIActivityIndicator 微调器只有在我的其他图层也加载后才可见。 (这对我当然没用)。处理这个问题的正确方法是什么?
- (void)loadView {
CGRect fullScreenRect=[[UIScreen mainScreen] bounds];
UIView *contentView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 340, fullScreenRect.size.width)]autorelease];
self.view = contentView;
spinner = [[[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite] autorelease];
spinner.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
spinner.center = self.view.center;
[self.view addSubview:spinner];
[spinner startAnimating];
scrollView=[[[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 340, fullScreenRect.size.width)]autorelease];
...setting up scrollView...
[self.view addSubview:scrollView];
}
- (void)viewDidLoad
{
[super viewDidLoad];
[spinner removeFromSuperview];
}
我发现了一个有点相似的线程: UIActivityIndicatorView not showing until after loading done
但它建议在后台线程中加载东西,但据我所知,加载和显示 UIView 只能在主线程中进行。
我是初学者,如果我的问题根本上是错误的,我很抱歉。
【问题讨论】:
-
我看到了几个选项 - 您可以在后台线程中将视图渲染为屏幕外的图像,完成后,将视图的图像添加到滚动视图,或者您可以实现滚动查看平铺并按需加载滚动视图内容。可能还有其他优化 - 运行仪器。如果您在理解这些选项方面需要更多帮助,请告诉我。
-
你为什么使用 loadView 而不是使用 nib?您是初学者,但正在尝试使用先进的技术,这将使您需要做的事情变得非常困难。所以使用带视图的笔尖。当您获得 viewDidLoad 时,将微调器添加到您的视图中。提供一种方法来关闭微调器并更新您的视图。在 viewDidLoad 中,在默认队列上使用 dispatch_async() 来完成后台繁重的工作。完成后,让它通过 dispatch_async(dispatch_get_main_queue() 发送另一条消息,告诉您的 viewController 工作已完成。这将花费您几天的时间,因此请做好计划。
标签: ios uiview uiactivityindicatorview