在 Table View UIImage 中使用 SD_setImage 缓存

Posted

技术标签:

【中文标题】在 Table View UIImage 中使用 SD_setImage 缓存【英文标题】:Cache using SD_setImage in Table View UIImage 【发布时间】:2019-08-19 12:52:09 【问题描述】:

我想在我的表视图中为 UIImage 使用 sd_setImage。但我不确定如何...

func feedsImage() 

        Database.database().reference(withPath: "Users/\(self.userID)/Images").observe(.childAdded, with:  (snapshot: DataSnapshot) in

            if let userDict = snapshot.value as? [String:Any] 

                let getphotoUrl = userDict["photoUrl"] as! String
                let post = Post(getphotoUrl: getphotoUrl)
                    self.post.append(post)
                        print(self.post)
                            self.myTableView.reloadData()
            
        )
    

这是表格视图

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell let cell = UITableViewCell(style: .default, reuseIdentifier: "myCell")

        DispatchQueue.global().async 
            let postImage = self.post[indexPath.row]
            if let photoUrl = URL(string: postImage.photoUrl!) 

                do 

                    let data = try Data(contentsOf: photoUrl)
                    DispatchQueue.main.async 
                        cell.imageView?.image = UIImage(data: data)
                        cell.imageView?.frame = CGRect(x: 0, y: 0, width: 450, height: 450)

                     // DispatchQueue.main

                   catch 
                        print("Error in re-sampling UIImage")
                

            

         // DispatchQueue.global
        return cell

     //MARK:- cellForRowsAt

【问题讨论】:

【参考方案1】:

添加 pod 并安装后,导入

 import SDWebImage


 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = UITableViewCell(style: .default, reuseIdentifier: "myCell") 
    cell.imageView.sd_setImage(with: URL(string:post[indexPath.row].getphotoUrl), placeholderImage: UIImage(named: "placeholder.png"))
    return cell
 

顺便说一句,替换这一行总是更好

let cell = UITableViewCell(style: .default, reuseIdentifier: "myCell")

let cell = tableView.dequeueReusableCell(withIdentifier: "myCell")!

【讨论】:

以上是关于在 Table View UIImage 中使用 SD_setImage 缓存的主要内容,如果未能解决你的问题,请参考以下文章

将 UIImage 分配给 Collection View Cell

从 UIView 制作 UIImage 但不在主线程中

UIImage 不使用 Swift 显示

无法使用CIFilter从CIImage中提取UIImage

iOS 绘图 (UIImage的一些操作)

没有 UIImageView 的 UIImage 的反射