gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:39:28 25 4
gpt4 key购买 nike

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

目前每个图像的大小可以在 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 作为 subview 添加到 contentView

最佳答案

您可以执行#2 从背景中提取图像。从后台线程将图像加载到内存,然后通过主线程分配它

    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
}

关于ios - UITableView 单元格背景图像初始滚动滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49408895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com