我感到困惑的是,沒有人能回答這個問題......
所以,我終於想通了如何acheive的確切同樣是在實際的應用程序商店來如何的圖標效果,問候被下載/顯示。
取LazyTableImages示例項目並進行一些簡單的修改。
轉到到根視圖控制器和刪除關於所有的檢查是表滾動和/或在減速的cellForRowAtIndexPath
刪除以loadImagesForOnScreenRows所有呼叫,因而去除方法爲好。
進入IconDownload.m並將startDownload方法更改爲而不是做一個異步圖像downlaod,而是在後臺線程上執行同步下載。刪除startDownload所有的代碼,並添加以下,所以它看起來是這樣的:
- (void)startDownload
{
NSOperationQueue *queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(loadImage) object:nil];
[queue addOperation:operation];
[operation release];
[queue release];
}
然後,添加一個的LoadImage,像這樣:
- (void)loadImage
{
NSData *imageData = [[NSData alloc] initWithContents OfURL:[NSURL URLWithString:appRecord.imageURLString]];
self.apprecord.appIcon = [UIImage imageWithData:imageData];
[imageData release];
[self performSelectorOnMainThread:@selector(notifyMainThread) withObject:nil waitUntilDone:NO];
}
然後,添加notifyMainThread這樣:
- (void)notifyMainThread
{
[delegate appImageDidLoad:self.indexPathInTableView];
}
完成!運行它,你會看到確切的應用商店行爲,沒有更多的等待請求圖像下載,直到滾動停止,並沒有更多的等待圖像顯示,直到滾動停止,或直到用戶從屏幕上移除他們的手指。
只要單元準備好可以顯示圖像,下載圖像就會立即顯示圖像。
對不起任何錯別字,我沒有從我的應用程序無論如何粘貼此,我輸入它,因爲我現在從我的MAC很遠......
,我希望這可以幫助大家。 ..
我試過這個。我已經確認,下載新顯示的項目圖像的調用立即發生。但是,connectionDidFinishLoading:直到滾動完成停止纔會被調用。我很困惑這種行爲... – bpatrick100 2011-02-11 01:40:48
另一種描述示例應用程序行爲的方式是,如果你向上滑動列表,但不釋放你的手指(保持在屏幕上),你會看到圖像不顯示。然後,只要鬆開手指,圖像就會顯示出來。這看起來像單線程行爲。我想知道這是否是整個問題。我想知道是否需要明確地將每個圖像下載調用放到他們自己的線程中... – bpatrick100 2011-02-11 01:46:37