如何获得有关imageWithContentsOfFile的通知:完成?

时间:2011-03-21 14:40:15

标签: iphone ios ipad delegates uiimage

我使用imageWithContentsOfFile:加载一个巨大的图像,所以我必须在此过程中设置一个activityIndi​​cator。

我可以使用任何方式/任何委托回调来了解此加载过程的结束吗?

3 个答案:

答案 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可能会更容易。