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高度代理时,对应图片的缓存都已经存在了。
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高度代理时,对应图片的缓存都已经存在了。
相关文章推荐
- iOS中3DTouch预览导致TableView滑动卡顿问题解决的方法
- IOS TableView滑动不灵敏问题
- IOS中的frame 和 tableView的滑动问题
- ios键盘弹起tableView的滑动区域问题
- ios tableview section标题不滑动问题
- ios 小问题,滑动tableview,导航出去,再回来会保持原样,但我想自动保持顶部
- IOS中的frame 和 tableView的滑动问题
- iOStableView 自动布局常见问题之页面滑动到最底时,下面多出44的距离!
- 解决tableView cell添加阴影滑动卡顿问题,只需多两行代码
- iOS之tableView性能优化/tableView滑动卡顿?
- iOS 在tableView上添加button导致按钮没有点击效果和不能滑动的问题
- iOS tableview(瀑布流) 滑动的时候卡顿解决
- IOS 解决tableView header 跟着滑的问题
- (四十二)tableView的滑动编辑和刷新 -局部刷新和删除刷新 -待解决问题
- iOS scrollView和tableView的冲突问题
- iOS中TableView在Nav存在下发生下移的问题
- 解决自定义可左右滑动cell时和tableview的滑动手势冲突问题
- iOS tableView的偏门问题
- viewpager、fragment滑动切换卡顿问题
- iOS中绑定tableview后,变量值消失的问题