我使用imageWithContentsOfFile:加载一个巨大的图像,所以我必须在此过程中设置一个activityIndicator。
我可以使用任何方式/任何委托回调来了解此加载过程的结束吗?
答案 0 :(得分:3)
imageWithContentsOfFile
是同步的。
你可以启动一个活动指示器,在背景线程中将你的大图像加载到内存中,然后返回主线程并停止指示。
- (void)loadBigImage {
[activityIndicator startAnimating];
[self performSelectorInBackground:@selector(loadBigImageInBackground) withObject:nil];
}
- (void)loadBigImageInBackground {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
UIImage *img = [UIImage imageWithContentsOfFile:@"..."];
[self performSelectorOnMainThread:@selector(bigImageLoaded:) withObject:img waitUntilDone:NO];
[pool release];
}
- (void)bigImageLoaded:(UIImage *)img {
[activityIndicator stopAnimating];
// do stuff
}
答案 1 :(得分:0)
简短回答:不。遗憾!
答案很长:
您可以使用C样式方法(即fopen,fread等)在后台进程(NSOperation?)中逐位打开文件,并在加载期间将主要线程的消息通知发送回主线程。然后创建图像并发出图像准备好的通知吗?
答案 2 :(得分:0)
如果你想要一个代表&如果被告知负载的进度,您可以使用NSURLConnection
代替同步imageWithContentsOfFile
。
Apple URL Loading System Programming Guide
中有一个例子您的NSURLConnection委托didReceiveData:
方法可以将传入的数据附加到NSData
对象,然后您可以使用UIImage imageWithData:
在下载所有内容后创建图像。
这为您提供了监控负载进度的最大灵活性/控制权;虽然如果你想要做的就是避免在图像下载时挂起UI,只需在后台线程中使用imageWithContentsOfFile
可能会更容易。