您的位置:首页 > 理论基础 > 计算机网络

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

2015-07-10 09:32 686 查看
        最近做一个有关于新闻的一个加载图片的版块, 但在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;

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息