gpt4 book ai didi

ios - 根据 slider 值重新加载 UITableView 数据

转载 作者:行者123 更新时间:2023-12-02 01:14:29 25 4
gpt4 key购买 nike

我正在尝试实现一个表格 View ,它应该根据 UISlider 的值显示单元格。

示例:表为空。用户快速将 slider 拖动到值 400。现在表应包含 400 行。

单元格应显示的数据存储在核心数据中,大约有 400 个条目。我们试图在拖动 slider 时实现很酷的效果,以便您可以直观地看到添加的每个单元格(当然,如果您正在查看表格 View 中单元格最终所在的部分)。使用 - (void) reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation 时提供的内置动画就足够了,并且在 1 到 10 行之间时效果看起来很酷。

问题:当该值达到 10 或更多后,它开始滞后太多而无法工作。我认为这是因为 reloadSections: 每次 slider 更改值时都必须检查每个单元格,并且我浪费了太多宝贵的时间。

所以,我正在寻找有关如何实现这一点的想法。我是否应该使用 NSFetchedResultsController 并在每次 slider 更改值时更改获取请求(每秒可能发生 20 次)?我应该将所有数据加载到数组中并以标准方式重用单元格吗?

两种方法我都试过了,延迟几乎是一样的。我认为问题可能是 reloadSection: 太慢。我认为 - (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation 会是更好的选择,但我正在寻找有关如何实现此功能的更多想法。

如有任何帮助,我们将不胜感激!

当 slider 更改值时我测试的最后一个代码:

- (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;

最佳答案

我在 iOS 开发方面的经验并不丰富,但我做过很多游戏开发。问题的根源似乎是程序必须渲染的动画量。既然你说你这个程序的动机是保留炫酷的效果,那么你应该改变一切可能的方式来优化你的程序,直到用户可以感知的程度。我知道这不是很清楚,所以这是一个可能的解决方案:

您不应该为用户移动 slider 的每种速度添加每一行的动画。相反,只制作您需要的动画,以获得流畅的体验。这可以通过计算 slider 更改的速率,然后调整在调用 reloadData 之前向表中添加的行数来完成。仅对循环中最后一行的添加进行动画处理。

因为我不知道你正在为什么系统开发,也不知道各种 iOS 平台的图形功能,所以我无法真正给你具体的值,但你应该尝试不同的设置和看看什么有效。

关于ios - 根据 slider 值重新加载 UITableView 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10979462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com