2012-05-16 59 views
1

我有一個應用程序,我建立它的工作正常,但我使用的圖像源是從一個網站,當我切換回我的初始視圖,它需要相當一段時間來加載。我的問題是有沒有辦法完成這項工作,並且速度會更快。 這裏是我用它來拉我的圖像源簡單的異步圖像下載UIImage視圖

////Loads UIImageView from URL 
todaysWallpaper.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.inkdryercreative.com/daily/archive/mondays/images/062-mondays-960x640-A.jpg"]]]; 

任何幫助或在正確方向上推的代碼。很快,圖像每天都會改變,所以任何幫助/想法都會非常感謝。

回答

2

這裏的問題在於dataWithContentsOfURL:位於主線程中,因此在下載圖像時它會阻止您的用戶界面。

你必須異步下載它。爲此,我親自使用了我在互聯網上找到的一大段代碼:SDWebImage。它確實是你想要的。

+0

您使用的是哪部分代碼,您會發現最好的 – Gabriel

+1

將所有文件添加到您的項目中。然後導入類別「UIImageView + WebCache.h」。之後,你可以做[myImageView setImageWithURL:myURL]; – Zoleas

+0

你好,只是遵循你的建議,但沒有奏效。它建立並運行良好,但沒有圖像顯示。我錯過了什麼嗎? – ratsimihah

1

包裹的UIImage創造一個塊異步運行(代碼假設ARC)該消息又在主線程

@implementation Foo 
... 
Foo* __weak weakSelf=self; 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    UIImage *image = [UIImage imageWithData: [NSData dataWithContentsOfURL: 
        [NSURL URLWithString:@"http://www.inkdryercreative.com/..jpg"]]]; 
    dispatch_sync(dispatch_get_main_queue(),^ { 
     //run in main thread 
     [weakSelf handleDelayedImage:image]; 
    }); 
}); 

-(void)handleDelayedImage:(UIImage*)image 
{ 
    todaysWallpaper.image=image; 
} 

的weakSelf伎倆確保您的Foo類進行適當的清理,即使調用回調網址請求仍在運行

+0

中查看完美,正是我所期待的,謝謝 –