我有一个应用程序,其中有一个表格视图严格从资产拉动单元格背景图像。我注意到由于将这些图像加载到表格视图中,fps会在初始滚动上下降。 (如果我只是用黑盒替换UIImage或者给出所有相同的图像,则滚动是无缝的)。一旦表视图中的所有图像第一次加载,滚动操作就没有延迟。
目前每张图片的范围在1.8MB到3MB之间。对于3x图像,纵横比约为1125x295,对于1x和2x设备,纵横比按比例缩小。设置背景图像时会调用initial.scaleAspectFill,但我不知道这是不是问题。我发现这个问题存在于6s,X,ipad mini和pro。
这是设置背景图像的方法
fileprivate let backgroundImageView: UIImageView = {
let view = UIImageView(axId: "backgroundImage")
view.contentMode = .scaleAspectFill
view.layer.masksToBounds = true
return view
}()
在单元格的init菜单中,backgroundImageView作为subView
添加到contentView答案 0 :(得分:0)
你可以从背景中做#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缓存图像,{{3}}具有自己的缓存图像的方式。非常整洁。
此外,您可能希望实现prepareForReuse,以便在重复使用单元格时卸载以前的图像。
override func prepareForReuse() {
super.prepareForReuse()
//Do your clean up here
}