아이폰 모바일 네트워크 이미지 로드
3460 단어 ios 그림 비동기 불러오기
@interface AsyncImageView: UIView {
NSURLConnection * connection;
NSMutableData * data;
}
@end
@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] & gt; 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
- (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;
}