qq_27736043的博客

编程是一门艺术.

在tableviewcell 加载图片,解决第三方SDWebImage网络不是很通畅的状态下往下拉不能加载图片

        最近做一个有关于新闻的一个加载图片的版块, 但在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;

  

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27736043/article/details/46826305
个人分类: ios
下一篇UIButton 的各种状态的选择
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭