2014-09-22 89 views
1

我使用UIImageView + AFNetworking获取图像URL并使用该图像调整大小,如果大小很大。如果规模大,我需要在UIImageView + AFNetworking成功阻止调整图像大小并返回图像高度来调整单元格高度

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

执行和调整返回块之前返回问题的高度返回图像的高度。我想等到我在成功块中进行的过程。完成并返回方法中的图像大小。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
UIImageView *ivImage = [[UIImageView alloc]init]; 
      __block BOOL isResized = NO; 
      [ivImage setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[[marrMainNewsFeed objectAtIndex:indexPath.row] valueForKey:@"image"]]] placeholderImage:[UIImage imageNamed:@"placeholder.png"] success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { 
       //    cell.ivImage.image = image; 
       NSLog(@"image size %f",image.size.width); 
       if (ivImage.image.size.width >= SCREEN_WIDTH - 10) { 
        // I resize my image by calling following method 
        ivImage.image = [CommonFunctions imageWithImage:ivImage.image scaledToMaxWidth:SCREEN_WIDTH maxHeight:0]; 
        ivImage.frame = CGRectMake(ivImage.frame.origin.x, ivImage.frame.origin.y, SCREEN_WIDTH - 4, ivImage.image.size.height); 
        isResized = YES; 
        ivImage.image = image; 

//     height = ivImage.image.size.height; 
       } else { 
        ivImage.image = image; 
        ivImage.contentMode = UIViewContentModeCenter; 
//     height = ivImage.image.size.height; 
       } 
      } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) { 
       NSLog(@"Request failed with error: %@", error); 
      }]; 
      NSLog(@"new Height %@ for index %@",[email protected]"YES":@"NO",indexPath); 
           return height + 350; 
} 

返回首先被触发,然后图像被调整大小并给出图像的高度。我想等到调整大小完成后再返回单元格的高度。

希望我会得到丰硕的成果

+0

我注意到您没有接受任何问题上的答案(勾号图标)。如果你觉得他们没有充分回答这个问题,请尽量发表评论。 – 2014-09-24 10:11:12

回答

0

这绝对是错误的事情。

URL请求可能需要很长时间 - 如果您确实等到图像已被提取并调整大小,那么您可能会阻止您的用户界面很长时间,以至于您将冒着用户假设的风险你的应用程序崩溃了,并强制退出它。你也会失败苹果测试的绝佳机会。

如果你需要知道你的形象有多大,布局的目的,那么唯一的选择,你必须是:

1)是否所有的取的,你永远显示这个观点之前

2)根据您的应用程序和服务器体系结构,在获取所有图像之前预取有关布局的信息。

另一种更简单的方法是在图像被取出后重新布局。

+0

我将获得600x600图片的最大尺寸。如果它大于那个,我必须调整到320。在显示图像之前是否有其他方式调整图像大小。基本上我需要根据宽度调整大小。在显示之前下载所有图像不是一个好主意。因为它会占用大量的内存。我猜。 – 2014-09-22 09:48:03

+0

您可以使用CoreGraphics调整大小,但这不会解决任何问题。是的,在显示之前下载所有图像将占用大量内存,但是您的heightForRowAtIndexPath也会触发大量下载 - 如果用户向下滚动列表会发生什么情况?您需要重新考虑设计。 – 2014-09-22 10:07:05

+0

有没有什么办法可以调整图像的大小?这可以解决我在这种情况下的问题。 – 2014-09-22 10:38:34

相关问题