2013-09-29 41 views
0

我有一個鏈接到我的網站圖像的10個URL的數組。如何在下載完成後將通過SDWebImage下載的圖像加載到視圖控制器中?

我使用SDWebImages進行異步圖像下載,並使用for循環來運行URL數組。但是代碼會在第一個圖像下載之前通過For循環運行。因此,其餘的圖像永遠不會下載,新的視圖控制器永遠不會顯示

我該如何讓代碼運行通過for-loop,一旦圖像下載完成,它會彈出一個視圖控制器並在下載新圖像時得到更新。

這裏是我的代碼:

NewViewController *vc = [[NewViewController alloc] initWithNibName:nil bundle:nil]; 
NavigationController *navigationController = [[NavigationController alloc] initWithRootViewController:vc]; 

for (NSString *url in urls) { 
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectZero]; 
    [imageView setImageWithURL:[NSURL URLWithString:url] 
       placeholderImage:[UIImage imageNamed:@"post-imagePlaceholder"] 
        completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) { 
          item.image = image; 

          [self.images addObject:item]; 
          vc.results = self.images; 
          ; 
         } 
    }]; 
} 

[self presentViewController:navigationController animated:YES completion:nil] 

回答

0

幾個問題我跳出:

  1. 要創建一套新的圖象意見,但從來沒有把它們添加到任何視圖(例如addSubView)。

  2. 而且,如果這些觀點在NewViewController,你應該有一個控制器執行setImageWithURL呼叫(例如,在它的viewDidLoad),而不是當前視圖控制器。當前的視圖控制器應該簡單地將urls陣列傳遞給NewViewController

  3. 最後,你想填充與圖像的數組,但

    • 你寫這樣的方式,我猜你期待的是self.images之前將新填充視圖控制器出現。但它不會,因爲這個completed塊是異步發生的。

    • 無論如何,您通常不應該填充圖像數組,因爲圖像需要大量的內存。如果您的應用中的圖片數量增加,則會跨越內存警告。我們通常不應該維護URL數組,並讓SDWebImage緩存來有效地檢索圖像。

所以,當前視圖控制器應該只通過urls陣列,以及NewViewControllerviewDidLoad可以通過這些迭代,或者(a)找到適當的現有圖像視圖IBOutlet引用和呼叫setImageWithURL;或者(b)創建新的UIImageView,分別設置imageframe /約束,並將該圖像視圖添加到新視圖控制器的視圖。但是不要創建任何images數組。

如果不是所有的圖像視圖都是可見的,上述方法應該進一步細化(僅爲可見圖像視圖加載圖像)。但希望上述回答當前的問題。

+0

謝謝。你對第3.1點是正確的。我認爲它會,但每次它彈出一個空的NewViewController。我的NewViewController是一個UITableView,它顯示下載的圖像的行。我會嘗試傳遞網址數組而不是圖片。謝謝! – Scott

+0

@Scott如果你使用'UITableView',那麼這更容易。只需在'cellForRowAtIndexPath'中使用'setImageWithURL'即可。沒有'圖像'數組,沒有在'viewDidLoad'中手動創建'UIImageView'對象等等。這些'UIImageView'類別非常適合與表視圖組合。 – Rob

+0

這些單元格中的每一個都需要顯示3個圖像。此外,我需要檢查,以確保圖像是好的,即尺寸大於100×100。我需要下載和存儲的圖像,其他地方和分析,然後將圖像加載到單元... – Scott

相關問題