iOS开发之异步加载图片
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/...."]];
本文转自:http://www.istar.name/blog/ios-async-image