异步下载图片

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
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}


- (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];
}

- (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
使用:
AsyncImageView *asyncImage = [[AsyncImageView alloc] init];
asyncImage.frame = CGRectMake(100, point_y, 95, 95)
//圆角
[asyncImage.layer setMasksToBounds:YES];
[asyncImage.layer setCornerRadius:15];
[asyncImage loadImageFromURL:[NSURL URLWithString:@"www.istar.name/...."]];
不过发现一个好东东, SDWebImage, 这个实在是太方便了
主页:https://github.com/rs/SDWebImage
1.下载下来放到project里面
2. 添加:MapKit.framework
3. #import “UIImageView+WebCache.h”
4. 使用:
UIImageView *asyncImage = [[UIImageView alloc] init];
[asyncImage setImageWithURL:[NSURL URLWithString:@"www.istar.name/...."]]; 

 

你可能感兴趣的:(异步下载图片)