zoukankan      html  css  js  c++  java
  • IOS延时加载网络图片

     

       
    重网上下载图片是很慢的,为了不影响体验,选择延时加载图片是很好的办法。
    iOS延时加载图片
    一个tableView 列表,左边暂时没有图

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath

    {

    static NSString *CellIdentifier = @"myCell";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

        if (cell == nil)

    {

            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle

      reuseIdentifier:CellIdentifier] autorelease];

    cell.selectionStyle = UITableViewCellSelectionStyleNone;

        }

            // 设置cell一些数据

            AppRecord *appRecord = [self.entries objectAtIndex:indexPath.row];

            

    cell.textLabel.text = appRecord.appName;

            cell.detailTextLabel.text = appRecord.artist;

            // 如果不存在图片

            if (!appRecord.appIcon)

            {

                if (self.tableView.dragging == NO && self.tableView.decelerating == NO)//不在拖动中和减速时,开始下载图片

                {

                    [self startIconDownload:appRecord forIndexPath:indexPath];

                }

                //设置图片为空白图片(等待下载)

                cell.imageView.image = [UIImage imageNamed:@"Placeholder.png"];                

            }

    //如果有图片

            else

            {

               cell.imageView.image = appRecord.appIcon;

            }

        

        return cell;

    }

     
    关键就是[self startIconDownload:appRecord forIndexPath:indexPath];

    - (void)startIconDownload:(AppRecord *)appRecord forIndexPath:(NSIndexPath *)indexPath

    {

        IconDownloader *iconDownloader = [imageDownloadsInProgress objectForKey:indexPath];

        if (iconDownloader == nil) //已经在下载中的不用重复下载了,没有在下载中就往下走

        {

            iconDownloader = [[IconDownloader alloc] init];

            iconDownloader.appRecord = appRecord;

            iconDownloader.indexPathInTableView = indexPath;

            iconDownloader.delegate = self;

            [imageDownloadsInProgress setObject:iconDownloader forKey:indexPath];

            [iconDownloader startDownload];

            [iconDownloader release];   

        }

    }


    IconDownloader 是一个下载图片封装类
    关键方法:iconDownloader.delegate = self;
    [iconDownloader startDownload];
     
    一个是委托,将来告诉self下载完成更新图片
    一个是自己方法开始联网下载图片
     
    委托调用方法,重设图片

    - (void)appImageDidLoad:(NSIndexPath *)indexPath

    {

        IconDownloader *iconDownloader = [imageDownloadsInProgress objectForKey:indexPath];

        if (iconDownloader != nil)

        {

            UITableViewCell *cell = [self.tableViewcellForRowAtIndexPath:iconDownloader.indexPathInTableView];

            

            cell.imageView.image = iconDownloader.appRecord.appIcon;

        }

    }

     
    类IconDownloader 中的方法

    - (void)startDownload

    {

        self.activeDownload = [NSMutableData data];

        NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:

                                 [NSURLRequest requestWithURL:

                                  [NSURL URLWithString:appRecord.imageURLString]] delegate:self];

        self.imageConnection = conn;

        [conn release];

    }

    最后 NSURLConnection的委托需要自己实现了。
  • 相关阅读:
    Mixtile LOFT
    关于Linux系统清理/tmp/文件夹的原理
    在大型项目上,Python 是个烂语言吗
    Nginx 进程间通信
    蕤仁肉(内仁肉、泪仁肉)简单介绍
    TMS320F28335项目开发记录5_28335之CCS编程基础
    RBAC权限管理
    国内三大PT(Private Tracker)站分析
    Nginx特点
    java设计模式演示样例
  • 原文地址:https://www.cnblogs.com/worldtraveler/p/4569442.html
Copyright © 2011-2022 走看看