【问题标题】:UITableView Cell Background Images initial scroll lagUITableView 单元格背景图像初始滚动滞后
【发布时间】:2018-08-30 17:22:52
【问题描述】:

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

目前每张图片的大小可以在 1.8MB 到 3MB 之间变化。 3x 图像的纵横比约为 1125x295,1x 和 2x 设备的纵横比缩小。在设置背景图像时也会调用 initial.scaleAspectFill,但我不知道这是否会是问题所在。我发现 6s、X、ipad mini 和 pro 都存在这个问题。

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

这是设置背景图片的方法

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

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

【问题讨论】:

    标签: ios swift uitableview uiimageview uiimage


    【解决方案1】:

    您可以执行 #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
    }
    

    【讨论】:

    • 谢谢马克,我尝试调度图像检索,但仍然存在初始滞后。 KingFisher 是否更倾向于从网络上检索图像?不幸的是,我没有在这个特定视图中重复使用单元格或图像
    • 最有可能,但在我看来,因为它将接受 URL 作为参数,并且您正在从本地存储加载。您可以使用 KingFisher 的内存缓存。顺便说一句,对于 1.8MB 的图像,我认为您仍然可以对其进行优化以更好地加载。
    • 非常有帮助,我想知道图片
    • 如果这些是静态图像/资产(例如按钮、图标),100KB 已经太多了。请先尝试减少到​​ 500KB 并检查外观。顺便说一句,如果您支持 iPhone 5、5s、SE,我认为如果您的图像太大,它们也会遇到速度变慢。
    猜你喜欢
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    相关资源
    最近更新 更多