2012-02-15 108 views
0

我有一个小问题,我尝试使用AsyncImageView类从一个xml文件中显示一些图像到我的tableview,我发现这个类在一个网站,它工作得很好,问题是,如果我向下滚动慢慢的图像是负荷几乎立刻,如果我向下滚动快速的图像需要一定的第二加载...这是代码asyncimageview slow rendering - uitableview

#import "AsyncImageView.h" 


@implementation AsyncImageView 

- (void)dealloc { 
    [connection cancel]; //in case the URL is still downloading 
} 


- (void)loadImageFromURL:(NSURL*)url { 
    //in case we are downloading a 2nd image 

    NSURLRequest* request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; 

    connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; //notice how delegate set to self object 
} 


//the URL connection calls this repeatedly as data arrives 
- (void)connection:(NSURLConnection *)theConnection didReceiveData:(NSData *)incrementalData { 

    if (data==nil) { data = [[NSMutableData alloc] initWithCapacity:2048]; } 

    [data appendData:incrementalData]; 
} 

//the URL connection calls this once all the data has downloaded 
- (void)connectionDidFinishLoading:(NSURLConnection*)theConnection { 

    //so self data now has the complete image 
    connection=nil; 

    if ([[self subviews] count]>0) { 
     //then this must be another image, the old one is still in subviews 
     [[[self subviews] objectAtIndex:0] removeFromSuperview]; //so remove it (releases it also) 
    } 

    //make an image view for the image 
    UIImageView* imageView = [[UIImageView alloc] initWithImage:[UIImage imageWithData:data]]; 
    imageView.contentMode = UIViewContentModeScaleAspectFit; 

    [self addSubview:imageView]; 
    imageView.frame = self.bounds; 
    [imageView setNeedsLayout]; 

    [self setNeedsLayout]; 

    //don't need this any more, its in the UIImageView now 
    data=nil; 
} 

- (UIImage*) image { 
    UIImageView* iv = [[self subviews] objectAtIndex:0]; 
    return [iv image]; 
} 

@end 

,这是表的代码

// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 
    } 
    else { 
     AsyncImageView* oldImage = (AsyncImageView*) 
     [cell.contentView viewWithTag:999]; 
     [oldImage removeFromSuperview]; 
    }  
    elemento = [array objectAtIndex:indexPath.row]; 

    NSString *indirizzoImmagine = [elemento objectForKey:@"Descrizione"]; 

    CGRect frame; 
    frame.size.width=88; 
    frame.size.height=88; 
    frame.origin.x=0; 
    frame.origin.y=0; 

    AsyncImageView* asyncImage = [[AsyncImageView alloc] initWithFrame:frame]; 

    asyncImage.tag = 999; 
    NSURL *url = [NSURL URLWithString:indirizzoImmagine];  
    [asyncImage loadImageFromURL:url]; 

    cell.accessoryView = asyncImage;  

    return cell; 
} 

我如何优化tableview?

回答

0

您的网络可能无法满足加载每个图像所需的速度。首先,我会确保您的图片很小,接近您的图片尺寸。此外,随着您加载图像的方式,以及iOS回收表格单元格的方式,您可能会加载已回收单元格的图像。如果是这种情况,只需取消oldImage参考文献中的负载即可使用。