【问题标题】:Kingfisher and swift 3 - cannot set image with urlKingfisher 和 Swift 3 - 无法使用 url 设置图像
【发布时间】:2019-02-14 18:33:40
【问题描述】:

查看文档和迁移指南,我应该可以使用以下代码设置新图像:

imageView.kf.setImage(with:url ...) 

但实际上我在库中找不到这个方法,我只看到:

imageView.kf.setImage(with:Resource... )

我不知道该资源应该如何工作,因为我在文档中找不到任何内容。

【问题讨论】:

    标签: swift3 kingfisher


    【解决方案1】:

    Resource 是一个协议。 URL 已扩展为符合此协议。所以你可以这样做:

    let url = URL(string: ...)!
    imageView.kf.setImage(with: url)
    

    如果您想控制 Kingfisher 将哪些内容用于缓存中的密钥,可以使用 ImageResource

    let identifier = "..."
    let url = URL(string: "http://example.com/images/identifier=\(identifier)")!
    let resource = ImageResource(downloadURL: url, cacheKey: identifier)
    
    imageView.kf.setImage(with: resource)
    

    【讨论】:

      【解决方案2】:

      我用这个解决了这个问题:

      PhotoHelper.shared.imagePickedBlock = { [weak self] (image, url) in
            self?.imageView.kf.setImage(with: url, placeholder: image, options: nil, progressBlock: nil, completionHandler: { imageResult, error, type, cache in
              self?.imageView.image = image
            })
          }
      

      PhotoHelper 是原生 Image Picker 的包装器:

          func imagePickerController(_ picker: UIImagePickerController,     didFinishPickingMediaWithInfo info: [String : Any]) {
                currentVC.dismiss(animated: true, completion: {
                  if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
                    let url = info[UIImagePickerControllerReferenceURL] as! URL
                    self.imagePickedBlock?(image, url)
                   }
                })
            }
      

      【讨论】:

        【解决方案3】:

        对于 Swift 4.2

        import Kingfisher
        
        extension UIImageView {
            func setImage(with urlString: String){
                guard let url = URL.init(string: urlString) else {
                    return
                }
                let resource = ImageResource(downloadURL: url, cacheKey: urlString)
                var kf = self.kf
                kf.indicatorType = .activity
                self.kf.setImage(with: resource)
            }
        }
        

        如何使用

        self.imgVw.setImage(with: your image url)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-03-23
          • 1970-01-01
          • 2017-09-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多