iOS4 networkActivityIndi​​catorVisible通过UI阻止

时间:2010-12-01 13:11:51

标签: iphone objective-c sdk ios4

我正在请求下载一些图像,然后我想用它们替换子视图。 这意味着UI被阻止,然后稍后会显示新视图。

我希望用户了解由于下载而发生阻止。

首先我尝试使用

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
[self downloadFunction];
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

由于我的请求阻止了UI线程,因此导致活动指示器的最大闪烁(几乎没有)。

我无法将downloadFunction放到后台,因为我在推送控制器之前依赖于下载的数据可用(会导致错误“不支持多次推送相同的视图控制器实例”,因为我可以多次单击该按钮。)

然后我尝试在视图顶部放置带有旋转轮的子视图:

[self performSelectorInBackground:@selector(showActivitySubView) withObject:nil];
or  
[NSThread detachNewThreadSelector: @selector(showActivitySubView) toTarget:self withObject:nil];

但是UI仍然被阻止,我的指示器只在下载完成后显示...

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以简单地将方法拆分为两个并使用定时调用以允许在阻止主线程之前获取UI刷新线程。例如:

- (void) doActualWork {
  [self downloadFunction];
  [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}

- (void) doWork {
  [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
  [self performSelector:@selector(doActualWork) withObject:Nil afterDelay:0.05];
}

这可能是一种更好的方法,我不确定任务栏上的小指示器是否足以保持应用程序审核人员满意的活动指示,但这应该有效并且不需要线程。