2016-09-26 27 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