2016-05-23 53 views
0

我已經實現了一個基於圖像固有內容大小的自定義單元。圖像應該都具有相同的寬度,因此我必須調整它們的大小。我注意到scrollview不再那麼平滑地滾動了。我試圖在後臺線程上執行大小調整,但同步,因此生成的圖像可以確定單元格高度。我試過:UITableView調整後臺線程自定義大小的圖像Cell

 __block __weak id weakCell = cell; 
__block __weak id weakSelf = self; 
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){ 

UIImage *resizedImage = [weakSelf imageWithImage:currentOrderdItem.shoppingCartImage scaledToWidth:228 * npx] ; 
    dispatch_sync(dispatch_get_main_queue(), ^(void){ 
     [weakCell updateProductImage:resizedImage]; 
    }); 
}); 

cellForRowAtIndexPath方法,但它永遠不會完成。

如何在後臺線程上調整圖像大小並返回使用結果來調整自定義大小的單元格?

回答

0

嘗試dispatch_async。使用以下代碼行:

__block __weak id weakCell = cell; 
__block __weak id weakSelf = self; 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^(void) { 
UIImage * resizedImage = [weakSelf imageWithImage: currentOrderdItem.shoppingCartImage scaledToWidth: 228 * npx]; 
dispatch_sync(dispatch_get_main_queue(),^(void) { 
    [weakCell updateProductImage: resizedImage]; 
}); 
}); 

希望這會幫助你。

+0

您應該通過'tableView.cellForRowAtIndexPath'在調度塊內再次檢索單元格,以防它可能與'weakCell'單元格不同,特別是當用戶滾動得太快時。 – ozgur

+0

@ozgur我可以只使用完成塊內的索引,還是必須以某種方式將它分配給分派塊,以確保在用戶快速滾動時它不會更改? – HasenBaumeister

+0

這不起作用。因爲調用是異步的,所以在調整圖像大小之前,cellForRowAtIndexPath方法可能會返回。這意味着單元格尺寸不正確,因爲高度基於圖像尺寸。我試過在完成塊中調用layoutIfNeeded,但是這不會改變已經顯示的單元格的高度。 – HasenBaumeister