繁体   English   中英

从 Firebase 异步下载后动态图像调整大小

[英]dynamic image resizing after asynchronously downloading it from the firebase

我正在尝试根据我从 firebase 数据库下载的图像动态调整图像大小,并将其呈现在表格视图单元格中。 我希望图像的宽度为框架宽度和高度以进行相应调整。

我有一个 customImageView 类可以从 firebase 异步下载图像

我尝试了很多方法,但都是徒劳的。 有没有一种超级干净的方法来动态调整图像大小:-D

这是我的手机:

class viewControllerHomeCell: UITableViewCell  { 

   @IBOutlet var mainImage: CstmImageView!

  }

我的单元格为:

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cellData =  TableViewControllerHome.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! viewControllerHomeCell

    cellData.mainImage.loadImagesWithUrl(from: self.postArray[indexPath.row].covrImgUrl)
  }

这是一个 UIImageView 子类,用于从 firebase 异步加载图像。

class CstmImageView : UIImageView {
let imageCache = NSCache<AnyObject, AnyObject>()

var imageUrlString : String?
func loadImagesWithUrl(from imageUrl : String!)  {
    imageUrlString = imageUrl
    self.image = nil

    if let cachedImage = imageCache.object(forKey: imageUrl as AnyObject) as? UIImage {
        self.image = cachedImage
        return
    }

    let url = URLRequest(url: URL(string: imageUrl)!)
    URLSession.shared.dataTask(with: url) { (data, response, eror) in

        if eror != nil {
            print(eror!)
            return
        }

            DispatchQueue.main.async {
            if let downloadedImage = UIImage(data : data!) {
                if self.imageUrlString == imageUrl {
                  self.image = downloadedImage
                }
                self.imageCache.setObject(downloadedImage, forKey: imageUrl as AnyObject)
            }

        }
    }.resume()
 }
}

任何帮助都非常感谢:)

带上你的 imageView Height Outlet 并连接你的 imageView 高度约束

class viewControllerHomeCell: UITableViewCell  { 

    @IBOutlet var mainImage: UIImageView!
    @IBOutlet var viewImageViewHeight: NSLayoutConstraint!
 }

并使用 Pod 下载图片

吊舱'SDWebImage'

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
 {
     let cellData =  TableViewControllerHome.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! viewControllerHomeCell

        cellData.mainImage.sd_setImage(with:URL.init(string: "Pass Yor image Url string here"))
        { (image, error, imageCacheType, url) in

             cellData.mainImage.image = image

             viewImageViewHeight.constant =  image?.size.height
        }

        cellData.mainImage.loadImagesWithUrl(from: self.postArray[indexPath.row].covrImgUrl)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM