2015-08-17 51 views
0

要顯示我對存儲陣列稱爲imgViews在我的兩個角度的UIImageView對象,我嘗試使用此代碼以異步方式下載圖片,爲他們:下載圖片需要很長的時間的UIImageView

func showPic(positionIndex: Int){ 
    let urlStr = "https://www.friendesque.com/arranged/userpics/amir/1" 
    let url = NSURL(string: urlStr) 
    let session = NSURLSession.sharedSession() 
    let task = session.dataTaskWithURL(url!, completionHandler: { (data, response, error) -> Void in 

     if error == nil { 
      self.imgViews[positionIndex].image = UIImage(data: data) 
      //self.imgViews[positionIndex].image = UIImage(named: "11665489_10154101221228009_2542754962143804380_n.jpg") 
      print("Loading Done...") 

     } 
     else{ 
      print(error) 
     } 
    }) 
     task.resume() 
} 

和我的viewDidLoad(),我有

showPic(0) 

當我運行的代碼,我看到"Loading Done..."立即這就意味着畫面已經加載,但它需要一個很長的時間(約1分鐘),爲的UIImageView到內一個切換到加載的圖片。這是一個非常小的圖片(〜15K),它不是一個處理時間問題。

我試過加載一個資源圖片(代碼的註釋部分)而不是下載的圖片,但它仍然很慢。

我真的很困惑。爲什麼在處理區塊內的圖像時速度如此之慢?

回答

1

也許當數據任務返回它是在後臺線程?您將需要切換到主線程來更改UIImageView。無論如何,我會使用UIImageView + AFNetworking類來實現這一目標。它很簡單,經過很好的測試,可以讓您在下載時提供佔位符圖片以供顯示。

https://github.com/AFNetworking/AFNetworking/blob/master/UIKit%2BAFNetworking/UIImageView%2BAFNetworking.h

使用:

myImageView.setImageWithURL(url!)

+0

哦,這是一個很好的解釋。從未想過需要切換到主線程。謝謝。您建議的異步方法是什麼? – friendq

+0

@friendq是的,它是異步的 –