繁体   English   中英

UITableView单元格背景图像初始滚动滞后

[英]UITableView Cell Background Images initial scroll lag

我有一个应用程序,其中有一个表格视图严格从资产中提取单元格背景图像。 我注意到,由于将这些图像加载到表格视图中,因此fps在初始滚动时下降了。 (如果我只是用黑盒替换UIImage或为所有相同的图像提供无缝滚动)。 首次加载表格视图中的所有图像后,滚动操作将没有延迟。

当前,每个图像可以在1.8MB和3MB之间变化。 对于3x图像,长宽比约为1125x295,而对于1x和2x设备则按比例缩小。 在设置背景图像时也会调用initial.scaleAspectFill,但是我不知道这是否是问题。 我发现6s,X,ipad mini和pro存在此问题。

  1. 您为背景图片建议的最大文件大小是多少?
  2. 如果我尝试将UIImages拉入后台线程,则不允许这样做,因为UIImages需要在主线程上处理(xCode错误)。
  3. 我应该设法弄清楚如何预缓存这些图像吗?

这是设置背景图像的方法

fileprivate let backgroundImageView: UIImageView = {
    let view = UIImageView(axId: "backgroundImage")
    view.contentMode = .scaleAspectFill
    view.layer.masksToBounds = true
    return view
}()

在单元格的初始化菜单中,将backgroundImageView作为子视图添加到contentView中。

您可以执行#2从背景提取图像。 从backgroundThread将图像加载到内存,然后通过mainThread将其分配

    fileprivate let backgroundImageView: UIImageView = {
        let view = UIImageView()

        DispatchQueue.global().async {
            let image = getFromSource()

            DispatchQueue.main.async {
                view.image = image
                view.contentMode = .scaleAspectFill
                view.layer.masksToBounds = true
            }
        }

        return view
    }()

或者,您可以使用KingFisher来缓存图像,该软件具有其自己的缓存图像的方式。 漂亮整齐。

另外,您可能想实现prepareForReuse,以便在要重用单元格时卸载以前的图像。

override func prepareForReuse() {
    super.prepareForReuse()

   //Do your clean up here
}

暂无
暂无

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

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