代码之家  ›  专栏  ›  技术社区  ›  Fattaneh Talebi

设置tableviewcell的图像会减慢Swift中的滚动速度

  •  0
  • Fattaneh Talebi  · 技术社区  · 7 年前

    我想从url加载图像,并将其设置为表格视图单元格。

    第二种方法是异步
    表视图单元格被重用,获取和更改图像需要一些时间。因此,在很短的时间内,tableview单元格会显示上一个图像,这是不正确的。

    DispatchQueue.global(qos: .userInitiated).async {
                    var userPhoto: UIImage?
    
                    if let imageUrl = participant?.image {
                        let url = URL(string:imageUrl)
                        if let data = try? Data(contentsOf: url!)
                        {
                            userPhoto = UIImage(data: data)
                        }
                    }
    
                    DispatchQueue.main.async {
                        if let userPhoto = userPhoto {
                            self.imageViewOwner.image = userPhoto
                        } else {
                            // Sets default image for profile.
                            self.imageViewOwner.image = UIImage(named: "default")
                        }
                    }
    
                }
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   ppalancica    7 年前

    用“异步”的方式做这件事是正确的。

    使您的视图控制器(或表视图数据源的任何对象)使用上面的对象(从内存或磁盘缓存)获取图像对象;您可能应该在下载后缓存图像)。如果该对象不可用-只需在任何地方使用一些默认图像(它可以是加载指示器图像、用户化身图像等)。

    也许您必须创建一个自定义单元格并覆盖它 prepareForReuse() 方法。在此处设置单元格的默认图像,如果当前下载仍在进行,则在显示单元格时,该图像不会在单元格上显示旧的/不正确的图像。

    注意:无论您是否使用开源库,步骤都是相同的。

        2
  •  1
  •   Shehata Gamal    7 年前

    你可以试试 SDWebImage

    self.imageViewOwne.sd_setImage(with: URL(string:imageUrl), placeholderImage: UIImage(named: "default"))