您的位置:首页 > 移动开发 > IOS开发

iOS开发笔记--异步加载图片在TableView中的应用

2016-01-27 10:06 507 查看
[objc] view
plain copy







//AsyncImageView.h文件

@interface AsyncImageView : UIView {

NSURLConnection* connection;

NSMutableData* data;

}

@end

[objc] view
plain copy







//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

[objc] view
plain copy







//在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: