아이폰 모바일 네트워크 이미지 로드


@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;
}


좋은 웹페이지 즐겨찾기