2012-06-11 47 views
3

我試圖實現一個表格視圖,它應該根據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; 
+0

您是否可以包含您當前正在使用的代碼以響應滑塊中的更改?你在尋找什麼樣的視覺效果 - 桌子是否也會一直向下滾動以顯示添加的新行? – jrturton

+0

我已經包含了當前的代碼,但我早些時候嘗試了更多方法。對於所有新行,該表格不會滾動,但它會刷新滾動指示器,這很好,因爲它可以節省一些性能。頂部的效果就足夠了。當從核心數據直接加載,一些行被添加到頂部,有的在中間等,這使得冷卻效果一路過關斬將。但它並沒有反映在當前的代碼中。感謝您花時間幫助! – Accatyyc

回答

2

我不是令人難以置信的與iOS開發經驗,但我已經做了很多的遊戲開發者的。看起來問題的根源在於程序必須呈現的動畫數量。既然你說你對這個程序的動機是保留了很酷的效果,那麼你應該改變一切可能,以優化你的程序,直到用戶可以感知的程度。據我所知,不是很清楚,所以這裏是一個可能的解決方案:

你不應該在動畫每增加單排,每在用戶可以移動滑塊速度。取而代之的是,只有讓你的體驗順利進行,纔能有儘可能多的動畫。這可以通過計算滑塊正在更改的速率,然後在調用reloadData之前調整添加到表中的行數來實現。只增加循環中最後一行的添加動畫。

因爲我不知道你正在開發什麼系統,或者真的很關心各種iOS平臺的圖形功能,所以我不能給你具體的價值,但你應該玩弄不同的設置並看看有什麼作用。

+0

是的,這是我必須去的。感謝你的回答 – Accatyyc