2012-06-11 20 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