我正在尝试实现一个表格视图,它应该根据 UISlider 的值显示单元格。
示例:该表是空的。用户快速将滑块拖动到 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;