Swift 3 Image下载无法正常运行

时间:2016-09-26 19:34:00

标签: image swift3 ios10

因此,经过5个小时的坚实咒骂,我终于设法将我的项目从Swift 2.2转换为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 个答案:

答案 0 :(得分:2)

所以在经过一番深思熟虑后,我找到了问题的根本原因。

它基本上有一个问题,我写的用于使图像视图为圆形的扩展,通过注释图像看起来很好。

如果有人使用类似的东西,我会调查这个并提供一个替代方案:

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
}

使用AlamofireImage似乎已对其进行了排序

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)

答案 1 :(得分:1)

要解决此问题,只需在layer.cornerRadius

之前添加此行
#include <string>
int main()
{
  std::string c = "abc";
  c = c + + "d";
  c = c + + + "d";
  c = c + + + + "d";
  c = c + + + + + "d";
  printf("%s\n", c.c_str());
}

然后所有图像都显示第一次加载