代码之家  ›  专栏  ›  技术社区  ›  junaid

将图像设置为从url下载的图像后,图像视图不会显示图像

  •  0
  • junaid  · 技术社区  · 7 年前

    这就是我正在做的。

    extension UIImageView {
        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() {
                    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)
        }
    

    我在图像中检查了它,并在调试状态下在预览中显示图像。但之后 self.image = image

    图像视图上没有任何更改图像未显示。有人知道问题出在哪里吗?谢谢

    4 回复  |  直到 7 年前
        1
  •  3
  •   Abilash Balasubramanian    7 年前

    下载图像的最有效方式: SDWebImage

    您可以将可可豆文件用于SDWebImage库。

    1. 初始化pod文件。
    2. pod“SDWebImage”
    3. 安装Pod文件。

    Swift代码段:

    import SDWebImage
    
    imageView.sd_setImage(with: URL(string: @"user-url"), placeholderImage: UIImage(named: "placeholder"))
    

    Objective-C代码段:

    #import <SDWebImage/UIImageView+WebCache.h>
    ...
    [imageView sd_setImageWithURL:[NSURL URLWithString:@"user-url"]
                 placeholderImage:[UIImage imageNamed:@"placeholder"]];
    

    希望这将有助于在使用UICollectionView或UITableView时有效地下载图像。

        2
  •  0
  •   gencaysahinn    7 年前

    您可以使用翠鸟库(如下所示)更轻松地完成。

    let url = URL(string: "url_of_your_image")
    imageView.kf.setImage(with: url)
    
        3
  •  0
  •   dahiya_boy    7 年前

    尝试以下代码

     if data != nil { // check nil here
    
                            let image = UIImage(data: data)
                        DispatchQueue.main.async { 
                            self.image = image
                        }
                        }
        }.resume()
    
        4
  •  0
  •   Vanita L.    7 年前

    无需检查图像mime类型,只需检查数据和图像就足够了,因为数据错误为零,反之亦然。

    更改为

    URLSession.shared.dataTask(with: url) { data, response, error in
            guard let data = data, let image = UIImage(data: data) else { return }
            DispatchQueue.main.async {
                self.image = image
            }
        }.resume()
    

    并使用调试器与映像进行交叉检查。