0

异步图像遇到问题不知道为什么会出现这个奇怪的问题。我正在应用异步图像加载技术,但图像在滚动加载后不会冻结,它们会再次加载。

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell=[self getCellContentView:CellIdentifier];
    }
    [cell setBackgroundColor:[UIColor redColor]];
    NSLog(@"%i",[discussionArray count]);
    NSDictionary *dict=[discussionArray objectAtIndex:indexPath.row];
    UILabel *textLabel1 = (UILabel *)[cell viewWithTag:1];
    UILabel *textLabel2 = (UILabel *)[cell viewWithTag:2];
    UILabel *textLabel3 = (UILabel *)[cell viewWithTag:3];
    UIImageView *avatarimage = (UIImageView *)[cell viewWithTag:4];
    UIImageView *new_oldimage = (UIImageView *)[cell viewWithTag:5];
    UIImageView *avatarimage_cover = (UIImageView *)[cell viewWithTag:6];

    textLabel1.text =[dict objectForKey:@"user"];
    textLabel2.text =[dict objectForKey:@"date"];
    textLabel3.text =[dict objectForKey:@"text"];

    NSString *photoStrn=[dict objectForKey:@"photo"];
    avatarimage.image = nil;
    dispatch_async(dispatch_get_global_queue(0,0), ^{
        NSString *u=[NSString stringWithFormat:@"http://%@",photoStrn];
        NSURL *imageURL=[NSURL URLWithString:u];
        NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
        dispatch_sync(dispatch_get_main_queue(), ^{
            UIImage *dpImage = [UIImage imageWithData:imageData];
            if (dpImage==nil)
            {
                dpImage = [UIImage imageNamed:@"profileImage.png"];
            }


            [UIView animateWithDuration:5.0 animations:^{
                avatarimage.alpha = 1.0;
            }];
            avatarimage.image = dpImage;

        });

    });

    avatarimage_cover.image = [UIImage imageNamed:@"avtrcover.png"];

    NSString *new=[dict objectForKey:@"new"];
    if ([new isEqualToString:@"0"])
    {
        new_oldimage.image = [UIImage imageNamed:@"old_message.png"];
    }
    else
    {
        new_oldimage.image = [UIImage imageNamed:@"new_message.png"];
    }

    textLabel3.numberOfLines = 0;
    NSString *detailText = [[discussionArray objectAtIndex:indexPath.row] objectForKey:@"text"];
    CGSize textSize = [detailText sizeWithFont:[UIFont boldSystemFontOfSize:13] constrainedToSize:CGSizeMake(240, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap];
    textLabel3.frame = CGRectMake(70, 53, 240, textSize.height+detailTextoffset );
    return cell;


}
4

2 回答 2

0

这将彻底解决您的问题。点击以下链接:

单元格顶部的图像

于 2013-04-05T09:36:32.210 回答
0

avatarimage.image每次配置单元时,您都设置为 nil。无论如何,您都调用加载代码。因此,您不断重新加载图像也就不足为奇了。

相反,您应该维护一个可变的下载图像数组。这可能只是文档文件夹中某处图像的文件 URL。如果图像存在使用它,如果不下载它。

if (imageArray[indexPath.row]) {
  // use the image to populate the image view
}
else {
  // fetch async from server
}
于 2013-04-05T07:07:08.277 回答