我試圖實現一個表格視圖,它應該根據UISlider的值顯示單元格。根據滑塊值重新加載UITableView數據
示例:表格爲空。用戶將滑塊快速拖動到400的值。現在該表應該包含400行。
細胞應顯示的數據被存儲在覈心數據,並具有約400的條目。我們試圖在拖動滑塊時達到一個很酷的效果,以便您可以直觀地看到每個要添加的單元格(當然,如果您正在查看錶格視圖的最後部分)。使用- (void) reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation
時提供的內置動畫就足夠了,在1到10行之間效果看起來很酷。
問題:值達到10或更多後,它開始滯後工作太多。我認爲這是因爲reloadSections:每次滑塊更改值時都必須檢查每個單元格,並且我釋放了太多寶貴的時間。
所以,我正在尋找如何實現這一點的想法。我應該每次使用NSFetchedResultsController並更改提取請求滑塊更改值(可能發生每秒20次)?我是否應該將所有數據加載到數組中,然後以標準方式重用單元格?
我試過兩種方法,滯後幾乎相同。我在想這個問題可能是reloadSection:太慢了。我在想,- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
會是一個更好的選擇,但我正在尋找更多關於如何實現這一點的想法。
任何幫助,將不勝感激!
我測試的最後一個碼當滑塊改變值:
- (IBAction) sliderChangedValue:(UISlider *)slider
{
// Make sure we only run this function on integer changes. It fires too often on float changes.
if ((int)slider.value == lastSliderIntegerValue) {
return;
}
if (slider.value > lastSliderIntegerValue) {
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:(int)slider.value inSection:0]]
withRowAnimation:UITableViewRowAnimationAutomatic];
}
else {
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:(int)slider.value inSection:0]]
withRowAnimation:UITableViewRowAnimationAutomatic];
}
lastSliderIntegerValue = (int)slider.value;
您是否可以包含您當前正在使用的代碼以響應滑塊中的更改?你在尋找什麼樣的視覺效果 - 桌子是否也會一直向下滾動以顯示添加的新行? – jrturton
我已經包含了當前的代碼,但我早些時候嘗試了更多方法。對於所有新行,該表格不會滾動,但它會刷新滾動指示器,這很好,因爲它可以節省一些性能。頂部的效果就足夠了。當從核心數據直接加載,一些行被添加到頂部,有的在中間等,這使得冷卻效果一路過關斬將。但它並沒有反映在當前的代碼中。感謝您花時間幫助! – Accatyyc