您的位置:首页 > 移动开发 > IOS开发

iOS tableView滑动卡顿的问题之一

2017-07-26 23:36 369 查看
修改前计算cell高度的代码

let data = NSData(contentsOf: URL(string: self.model?.details?[indexPath.row-2] ?? "")!)
guard data != nil else {
return 0
}
let image = UIImage.init(data: data! as Data)
print(image?.size ?? 0)
cell.goodsImage.backgroundColor = UIColor.red
return (image?.size.height)! * kWidth/(image?.size.width)!

其中NSData(contentsOf: URL(string)方法是在主线程中执行,转为data比较耗时,导致tableView滑动的卡顿。所以在检查不是图片加载的问题后,对cell高度的返回进行了优化
//找出缓存中的图片并获得尺寸
let imageCache = SDImageCache.shared()
var image = UIImage()

//从缓存或磁盘中能找到
if imageCache?.imageFromMemoryCache(forKey: self.model?.details?[indexPath.row-2]) != nil || imageCache?.imageFromDiskCache(forKey: self.model?.details?[indexPath.row-2]) != nil {
image = (imageCache?.imageFromMemoryCache(forKey: self.model?.details?[indexPath.row-2]))!
return (image.size.height) * kWidth/(image.size.width)
} else {
//本地找不到
let data = NSData(contentsOf: URL(string: self.model?.details?[indexPath.row-2] ?? "")!)
guard data != nil else {
return 0
}
let image = UIImage.init(data: data! as Data)
return (image?.size.height)! * kWidth/(image?.size.width)!
}

利用SDWebImage框架的强大缓存机制,先在缓存中查找要加载的图片,有的话直接拿其尺寸来用,没有找到的图片就通过model数据转化data进而得到图片信息。
我想 找不到的情况应该不会存在吧,毕竟tableView的代理方法先执行的cell加载,包括了图片加载,执行cell高度代理时,对应图片的缓存都已经存在了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: