最近做一个有关于新闻的一个加载图片的版块, 但在cell加载图片重用的时候,当往下拉的时候一个cell上的图片不断的跳.就是读取对应的图片不准确.
使用第三方SDWebImage,能避免图片读取对应的图片不准确带来的问题,但是在网络不是很通畅的状态下往下拉,发现读到一定的数量的图片.下面的图片就不会加载了.
为了解决读取对应的图片不准确,无论怎么拉都能加载图片的问题.代码如下:
static NSString *cellID = @"newsCell";
LZDNewsCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
if (cell == nil) {
cell = [[LZDNewsCell alloc]initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:cellID];
}
//设置图片的显示内容模式
cell.imgsrc.contentMode = UIViewContentModeScaleAspectFit;
//加载数据模型
News *news = self.data[indexPath.row];
//在沙盒中取图
NSData *data = [NSData dataWithContentsOfFile:[self filePathWithFileName:news.title]];
UIImage *image= [UIImage imageWithData:data];
NSURL *url = [NSURL URLWithString:news.imgsrc];
if (image != nil) {
cell.imgsrc.image = image;
}else {
//缓存之前的覆盖图片
cell.imgsrc.image = [UIImage imageNamed:@"222.jpg"];
}
if(!image && url){
//设置子线程加载,优先级设置为最高级
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSString *title = news.title;// 要在线程堵塞之前记录名称
//子线程中直接加载图片
NSData *imgData = [NSData dataWithContentsOfURL:url];
//把图片数据直接写进沙盒
[imgData writeToFile:[self filePathWithFileName:title] atomically:YES];
dispatch_sync(dispatch_get_main_queue(), ^{
//更新对应的cell
if(indexPath.row < self.data.count)
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:(UITableViewRowAnimationNone)];
});
});
}
cell.newsFrame = newF;
return cell;