我已在-(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开始并且没有停止。
我应该在哪里编写微调器的代码?
答案 0 :(得分:1)
您需要先在后台线程中下载图像。在viewDidLoad
中,您需要启动您的微调器,然后启动后台线程。隐藏微调器并绘制图像取决于您的操作方式。下载完成后,您可以在后台线程中隐藏微调器,但严格来说,通常最好不要从主线程以外的任何线程修改用户界面。
如果您不想打扰处理自己的后台线程,请查看[NSURLConnection connectionWithRequest:delegate:]
。这将启动它自己的后台线程,允许您异步加载数据。在这种情况下,仍然在viewDidLoad
中启动您的微调器,然后处理NSURLConnection
内容,并在数据下载完成时调用的委托回调方法中隐藏微调器(因为您将那时候回到主线,我相信。)