UITableView异步加载图片

/AsyncImageView.h

#import<UIKit/UIKit.h>

@interface AsyncImageView : UIView {
       NSURLConnection*connection;

       NSMutableData*data;

}

-(void)loadImageFromURL:(NSURL*)url;

@end

 

//AsyncImageView.m

#import "AsyncImageView.h"
@implementation AsyncImageView

-(id)initWithFrame:(CGRect)frame{

    if((self = [superinitWithFrame:frame])) {

       // Initialization code

    }

    returnself;

}

- (void)loadImageFromURL:(NSURL*)url{

         if(connection!=nil){ 

               [connection release];

        }

        if(data!=nil) {

               [data release];

        }

        NSURLRequest* request = [NSURLRequestrequestWithURL:url  cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];

      connection= [[NSURLConnectionalloc] initWithRequest:requestdelegate:self];

      //TODO error handling, what if connection is nil?

}


-(void)connection:(NSURLConnection*)theConnection  didReceiveData:(NSData*)incrementalData {

            if(data==nil) {

                 data=[[NSMutableDataalloc]initWithCapacity:2048];

           }

           [dataappendData:incrementalData];

}


-(void)connectionDidFinishLoading:(NSURLConnection*)theConnection{

    [connectionrelease];

   connection=nil;

   if([[selfsubviews]count]>0){

         [[[selfsubviews]objectAtIndex:0]removeFromSuperview];

    }

  UIImageView*imageView=[[[UIImageViewalloc]initWithImage:[UIImageimageWithData:data]]autorelease];

  imageView.contentMode=UIViewContentModeScaleAspectFit;

   imageView.autoresizingMask=(UIViewAutoresizingFlexibleWidth||UIViewAutoresizingFlexibleHeight);

   [self addSubview:imageView];

   imageView.frame=self.bounds;

    [imageViewsetNeedsLayout];

   [self setNeedsLayout];

    [datarelease];

   data=nil;

}


- (UIImage*) image {

UIImageView *iv = [[selfsubviews]objectAtIndex:0];

return[iv image];

}




- (void)dealloc {

    [connectioncancel];

    [connectionrelease];

    [datarelease];

    [superdealloc];

}

@end

 

在uitableview 中调用

// Customize the appearance of table view cells.

- (UITableViewCell*)tableView:(UITableView *)tableViewcellForRowAtIndexPath:(NSIndexPath *)indexPath {

    

    staticNSString *CellIdentifier = @"Cell";

  

 UITableViewCell *cell =[tableViewdequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell ==nil) {

       cell = [[[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:CellIdentifier]autorelease];

}else{

AsyncImageView* oldImage =(AsyncImageView*)[cell.contentViewviewWithTag:999];

[oldImage removeFromSuperview];

    }

CGRect frame;

frame.size.width=150; frame.size.height=75;

frame.origin.x=20; frame.origin.y=5;

AsyncImageView *asyncImage = [[[AsyncImageView alloc]initWithFrame:frame] autorelease];

asyncImage.tag =999;

//NSString *strUrl= [imagesArrayobjectAtIndex:indexPath.row]

NSString *strUrl = @"http://merrimusings.mu.nu/archives/images/groundhog2.jpg";

NSURL *url = [NSURL URLWithString:strUrl];


[asyncImage loadImageFromURL:url];

//[cell.contentView addSubview:asyncImage];

[cell addSubview:asyncImage];

//cell.textLabel.text = [dataArrayobjectAtIndex:indexPath.row];

cell.textLabel.text = @"ok";

cell.textLabel.font = font;

cell.accessoryType =UITableViewCellAccessoryDisclosureIndicator;

    returncell;

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值