我正在使用UIImageView + AFNetworking获取图片网址,并在尺寸较大时使用该图片调整大小。如果尺寸很大,我需要在
中返回图像的高度- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
问题是在执行块之前返回高度并返回resize。我想等到我在成功块中执行的过程。完成然后返回方法中的图像大小。
- (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 %@",isResized?@"YES":@"NO",indexPath);
return height + 350;
}
首先触发返回,然后调整图像大小并提供图像的高度。我想等到调整大小完成然后返回单元格的高度。
希望我能得到富有成效的结果
答案 0 :(得分:0)
这绝对是错误的。
网址请求可能需要很长时间 - 如果您确实等到图片被提取并调整大小,那么您可能会阻止您的用户界面这么长时间以至于您冒着用户的风险假设您的应用已崩溃,并强制退出它。您也很有可能未通过Apple测试。
如果您需要了解图片的大小,出于布局目的,那么您唯一的选择就是:
1)在显示此视图之前完成所有提取
或
2)根据您的应用程序和服务器架构,在获取所有图像之前预取有关布局的信息。
另一种更简单的做法是在取出图像后重新开始。