7

我有一个当前导航到viewcontroller的按钮,连接到IBAction。UIActivityIndi​​catorView直到加载完成后才显示

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

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

所以我正在寻找一种方法来强制即时重绘(当我认为更多一点关于它不太可能使工作),或在指标出现后加载图片的方式,或者启动一个单独的线程或类似的方法来启动动画/显示指示器,或者将指示器放在单独的视图控制器中,并以某种方式强制它在进行图片加载之前添加/显示自己。

建议?

回答

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]; 
} 
+0

谢谢你,工作就像一个魅力!这对于这样的一次性来说简单而有用。有关如何将它用于具有大量加载和线程的较重应用程序时的任何提示? – 2010-11-04 15:20:58

+1

+1创建线程!很好的答案。 – jv42 2010-11-04 15:21:23

+1

我希望我能够百万次提升这一点。 – Mason 2011-10-20 19:31:34

相关问题