在哪里使用UIActivityIndi​​catorView?

时间:2009-12-29 18:34:23

标签: iphone cocoa-touch

我已在-(void)loadView{ }编写代码,以使用NSURL从互联网上获取图像。但在加载图片之前,我需要显示微调器(UIActivityIndicatorView)。

#import "ImageFromWebViewController.h"
#define USE_TEST_SERVER 1
@implementation ImageFromWebViewController
+(NSString *)fileName 
{
#if USE_TEST_SERVER 
    return @"http://happyhyderabad.files.wordpress.com/2009/04/anushka4.jpg";
#else
    return @"http://nutritionresearchcenter.org/healthnews/wp-content/uploads/2008/07/johnny_depp.jpg";
#endif
}

- (void)loadView {
    NSString *urlString = [ImageFromWebViewController fileName];
    NSURL *url = [NSURL URLWithString:urlString];
    UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
    imageView = [[UIImageView alloc] initWithImage:image];
    contentView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
    [contentView setContentSize:[image size]];
    [contentView addSubview:imageView];
    [imageView setUserInteractionEnabled:NO];
    self.view = contentView;
}

- (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        }

- (void)dealloc {
    [imageView release];
    [contentView release];
    [super dealloc];
}
@end

viewDidLoad中,我编写了UIActivityIndicatorView的代码,但是在加载图像后spinner开始并且没有停止。

我应该在哪里编写微调器的代码?

1 个答案:

答案 0 :(得分:1)

您需要先在后台线程中下载图像。在viewDidLoad中,您需要启动您的微调器,然后启动后台线程。隐藏微调器并绘制图像取决于您的操作方式。下载完成后,您可以在后台线程中隐藏微调器,但严格来说,通常最好不要从主线程以外的任何线程修改用户界面。

如果您不想打扰处理自己的后台线程,请查看[NSURLConnection connectionWithRequest:delegate:]。这将启动它自己的后台线程,允许您异步加载数据。在这种情况下,仍然在viewDidLoad中启动您的微调器,然后处理NSURLConnection内容,并在数据下载完成时调用的委托回调方法中隐藏微调器(因为您将那时候回到主线,我相信。)