在tableview中加载异步图像,它们会在每次滚动时消失

时间:2011-05-02 11:17:49

标签: iphone uitableview uiimageview uiimage

我正在解析一个包含拇指图像网址的xml文件。我想在uitableview中展示那些拇指。

使用类AsyncImageView(在this website上找到),我的代码可以正常工作。

唯一的问题是:每次用户滚动uitableview时,图像会消失一段时间......然后重新出现(我想我每次都会下载图像,但我不确定) !

这是一个丑陋的效果,我希望如果下载图像,它会保持可见。

这是我的代码(注意:在array_thumb中有之前解析过的网址):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

static NSString *CellIdentifier;
static NSString *NibNamed;

UIDeviceOrientation deviceOrientation = [UIApplication sharedApplication].statusBarOrientation;

if (deviceOrientation != UIDeviceOrientationLandscapeLeft &&
    deviceOrientation != UIDeviceOrientationLandscapeRight)
{
    CellIdentifier= @"Cell1";
    NibNamed = @"cell_gallery";
}
else
{
    CellIdentifier= @"Cell2";
    NibNamed = @"cell_gallery_landscape";
}

[[NSBundle mainBundle] loadNibNamed:NibNamed owner:self options:NULL];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];


if (cell == nil)
{
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:NibNamed owner:self options:nil];
    cell = [nib objectAtIndex:0];
}
else {
    AsyncImageView* oldImage = (AsyncImageView*)[cell.contentView viewWithTag:1];
    [oldImage removeFromSuperview];
}

CGRect frame;
frame.size.width=72; frame.size.height=72;
frame.origin.x=10; frame.origin.y=10;
AsyncImageView* asyncImage = [[[AsyncImageView alloc] initWithFrame:frame] autorelease];

NSString *title = [NSString stringWithFormat:@"%@", [array_title objectAtIndex:indexPath.row]];
UILabel *testoLabel = (UILabel*)[cell viewWithTag:2];
testoLabel.text = title; 


asyncImage.tag = 1;

NSLog(@"%@", asyncImage);

NSURL *url = [NSURL URLWithString:[array_thumb objectAtIndex:indexPath.row]];   
asyncImage.layer.cornerRadius = 10.0;
asyncImage.layer.masksToBounds = YES;
[asyncImage loadImageFromURL:url];

[cell.contentView addSubview:asyncImage];


UIColor *miocolore1 = [[UIColor alloc] initWithRed:247.0 / 255 green:247.0 / 255 blue:247.0 / 255 alpha:1.0];
UIColor *miocolore2 = [[UIColor alloc] initWithRed:233.0 / 255 green:233.0 / 255 blue:233.0 / 255 alpha:1.0];

if (indexPath.row % 2 == 0) {
    cell.contentView.backgroundColor =  miocolore1;
}
else {
    cell.contentView.backgroundColor =  miocolore2;

}


return cell;


}

2 个答案:

答案 0 :(得分:1)

您的代码或AsyncImageView中没有任何内容表明图像已缓存,因此似乎会重复下载相同的图像。

AsyncImageView正在使用以下内容加载图像:

[NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy];

您可能希望通过更改缓存策略来确保缓存实际发生在此处。

我会结帐ASIHTTPRequest,它有很棒的缓存实现。

答案 1 :(得分:0)

由于单元格被重用,您必须自己提供数据。您可以将下载的图像保存为NSData或UIImage并提供要下载的URL,也可以使用已下载的数据。 这样每次滚动时都不会下载图像。