我试图实现一个表格视图,它应该根据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