iOS异步加载图片方法

来源:互联网 发布:大数据分析师培训班 编辑:程序博客网 时间:2024/05/20 03:46

比较原始的方法:

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

    }

    returnself;

}

  

- (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/...."]];

0 0
原创粉丝点击