UIActivityIndicatorView 直到加载完成后才显示

8

我在当前导航的视图控制器上有一个按钮,与一个IBAction相连。

在IBAction中,我像往常一样使用[self.view addSubView]创建了一个UIActivityIndicatorView,然后加载了一些图片。

我尝试在指示器视图、视图控制器和窗口上设置setNeedsDisplay,但它仍然会在显示指示器之前加载图片,这当然对我来说是毫无用处的。

因此,我正在寻找一种方法,要么强制立即重绘(当我再仔细考虑时,这似乎不太可能实现),要么在指示器出现后加载图片,或者启动一个单独的线程或类似的东西来开始动画/显示指示器,或将指示器放在单独的视图控制器中,并以某种方式强制其在进行图片加载之前添加/显示自己。

有什么建议吗?

1个回答

18

在这种情况下,我会创建一个新的线程,这样主线程就可以处理UI交互,同时在后台加载内容。

首先显示UIActivityIndicatorView,然后创建一个新线程来加载图像,在新线程中执行的方法的最后一行隐藏UIActivityIndicatorView

以下是示例:

//do stuff...
[activityIndicatorView startAnimating];
[NSThread detachNewThreadSelector:@selector(loadImages) toTarget:self withObject:nil];
在你的loadImages方法中:
- (void) loadImages {
   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
   //load images...
   [activityIndicatorView performSelectorOnMainThread:@selector(stopAnimating)];
   [pool drain];
}

谢谢,运行得非常好!对于像这样的一次性任务来说,它简单而且有用。在将其用于具有大量加载和线程的重型应用程序时,有什么思考方法吗? - Henrik Erlandsson
我曾经遇到过类似的情况,当我需要在accessorybuttontapped上添加activityindicator并在点击后进入DetailsView时。有什么建议可以实现吗?因为当我简单地添加activityindicator和[self presentModalViewController:detailView animated:NO];时,它不会显示activityindicator。 - Sindhia
@Sindhia 你有在你的 UIActivityIndicatorView 上调用 -startAnimating 吗? - Jacob Relkin
是的,我已经打过电话了。但是因为我正在添加代码以在下面的startanimation中呈现nextview时触发accessorybutton,所以我无法看到activityindicator。在这种情况下,我该怎么办? - Sindhia
Jacob,你是个天才。+1 感谢你的帮助。 - x4h1d

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接