2016-09-26 40 views
2

因此經過5個小時的堅持宣誓後,我終於設法將我的項目從Swift 2.2轉換爲Swift 3.這個東西的構建和一切都變得精明,只有一個小例外。Swift 3圖片下載不能正常工作

由於某種原因,我的圖像不像以前那樣是異步下載。

我已經錄製了一段視頻,向您展示了一些代碼示例。我正在嘗試AlamofireImage和僅僅是一個普通的Swift擴展,都給出了相同的行爲。正如你在視頻中看到的那樣,最初圖像根本無法加載(另外我注意到由於某種原因,默認的佔位符圖像最初沒有顯示)當我拉動以突然刷新視圖時,它們出現。

如果有人看到類似的東西,我將不勝感激一些幫助,如果可能的話。

視頻是here

代碼的例子是這樣的: 擴展功能

func downloadedFrom(url: URL, contentMode mode: UIViewContentMode = .scaleAspectFit) { 
    contentMode = mode 
    URLSession.shared.dataTask(with: url) { (data, response, error) in 
     guard 
      let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200, 
      let mimeType = response?.mimeType, mimeType.hasPrefix("image"), 
      let data = data, error == nil, 
      let image = UIImage(data: data) 
      else { return } 
     DispatchQueue.main.async() {() -> Void in 
      self.image = image 
     } 
     }.resume() 
} 

func downloadedFrom(link: String, contentMode mode: UIViewContentMode = .scaleAspectFit) { 
    guard let url = URL(string: link) else { return } 
    downloadedFrom(url: url, contentMode: mode) 
} 

也是我的一個小區使用AlamofireImage的只是爲了測試

if nc.returnCommentDetails().image != "" { 
     let url = URL(string: nc.returnCommentDetails().image!) 
     cell.imgProfile.af_setImage(withURL: url!) 
     cell.imgProfile.resizeForProfilePic() 
    } 

回答

2

後,因此,一些反省我找到了問題的根源。

它基本上有一個問題,我寫了一個擴展名,使圖像視圖呈圓形,通過評論說圖像顯示正常。

我會考慮這一點,如果有人使用類似這樣的東西提供一種替代方案:用AlamofireImage

func resizeForProfilePic(){ 
    self.layer.borderWidth = 0.1 
    self.layer.masksToBounds = false 
    self.layer.borderColor = UIColor.black.cgColor 
    self.layer.cornerRadius = self.frame.height/2 
    self.clipsToBounds = true 
} 

似乎已經整理它

let url = URL(string: nc.returnCommentDetails().image!) 
let placeholderImage = UIImage(named: "DefaultImage")! 
let size = CGSize(width: 100.0, height: 100.0) 
let imageFilter = AspectScaledToFillSizeCircleFilter(size: size) 
cell.imgProfile.af_setImage(withURL: url!, placeholderImage: placeholderImage, filter: imageFilter) 
+0

我有同樣的問題。當我用cornerRadius註釋掉圖像時,圖像剛剛出現 – user3126427

1

要解決該問題,只需添加這line.cornerRadius

self.view.layoutIfNeeded() 

然後所有的圖像顯示與第一次加載

+0

很好。我現在可能會堅持使用AFImage,因爲它實際上有很多很酷的功能。但好的發現這一點。我失去了生存的意志:) – NodeJustin