2014-09-22 47 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

相關問題