- //AsyncImageView.h文件
- @interface AsyncImageView : UIView {
- NSURLConnection* connection;
- NSMutableData* data;
- }
- @end
- //AsyncImageView.m文件
- @implementation AsyncImageView
- - (void)loadImageFromURL:(NSURL*)url {
- if (connection!=nil) { [connection release]; }
- if (data!=nil) { [data release]; }
- NSURLRequest* request = [NSURLRequest requestWithURL:url
- cachePolicy:NSURLRequestUseProtocolCachePolicy
- timeoutInterval:60.0];
- connection = [[NSURLConnection alloc]
- initWithRequest:request delegate:self];
- //TODO error handling, what if connection is nil?
- }
- - (void)connection:(NSURLConnection *)theConnection
- didReceiveData:(NSData *)incrementalData {
- if (data==nil) {
- data =
- [[NSMutableData alloc] initWithCapacity:2048];
- }
- [data appendData:incrementalData];
- }
- - (void)connectionDidFinishLoading:(NSURLConnection*)theConnection {
- [connection release];
- connection=nil;
- if ([[self subviews] count]>0) {
- [[[self subviews] objectAtIndex:0] removeFromSuperview];
- }
- UIImageView* imageView = [[[UIImageView alloc] initWithImage:[UIImage imageWithData:data]] autorelease];
- imageView.contentMode = UIViewContentModeScaleAspectFit;
- imageView.autoresizingMask = ( UIViewAutoresizingFlexibleWidth || UIViewAutoresizingFlexibleHeight );
- [self addSubview:imageView];
- imageView.frame = self.bounds;
- [imageView setNeedsLayout];
- [self setNeedsLayout];
- [data release];
- data=nil;
- }
- - (UIImage*) image {
- UIImageView* iv = [[self subviews] objectAtIndex:0];
- return [iv image];
- }
- - (void)dealloc {
- [connection cancel];
- [connection release];
- [data release];
- [super dealloc];
- }
- @end
- //在tableview中具体使用
- - (UITableViewCell *)tableView:(UITableView *)tableView
- cellForRowAtIndexPath:(NSIndexPath *)indexPath {
- static NSString *CellIdentifier = @"ImageCell";
- UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
- if (cell == nil) {
- cell = [[[UITableViewCell alloc]
- initWithFrame:CGRectZero reuseIdentifier:CellIdentifier]
- autorelease];
- } else {
- AsyncImageView* oldImage = (AsyncImageView*)
- [cell.contentView viewWithTag:999];
- [oldImage removeFromSuperview];
- }
- CGRect frame;
- frame.size.width=75; frame.size.height=75;
- frame.origin.x=0; frame.origin.y=0;
- AsyncImageView* asyncImage = [[[AsyncImageView alloc]
- initWithFrame:frame] autorelease];
- asyncImage.tag = 999;
- NSURL* url = [imageDownload
- thumbnailURLAtIndex:indexPath.row];
- [asyncImage loadImageFromURL:url];
- [cell.contentView addSubview:asyncImage];
- return cell;
- }
转自: http://blog.sina.com.cn/s/blog_7f7a975b01017szx.html