如何沿滚动动态加载带有项目的iOS iCarousel

Posted

技术标签:

【中文标题】如何沿滚动动态加载带有项目的iOS iCarousel【英文标题】:How to load iOS iCarousel with items dynamically along scroll 【发布时间】:2013-07-11 09:38:48 【问题描述】:

我在本地存储中有大约 200 多个项目,我应该在 iCarousel 中显示这些项目。

我知道我可以更新我的数据模型数组并调用[carousel reloaddata]。但我不想为此包含任何控制。我想将此作为最后的选择,因为这将在重新加载时包含一些视觉闪烁。

理想情况下,我希望在滚动时执行此操作。喜欢:

我可以在我的数据源数组中保留大约 20 个项目 我可以用这 20 个装满旋转木马 当用户滚动时,有时我会清空数据源数组 清空轮播并致电 reloadData 以更新新项目 用户不应该知道发生了这种重新加载。

简而言之,在不消耗太多资源的情况下,我希望轮播滚动流畅无缝。

我应该捕获哪些 iCarousel 事件以及何时捕获?

我应该重复使用相同的项目视图还是删除现有的并重新开始使用新数据?

附言

顺便说一句,有谁知道轮播一次可以支持多少个项目视图,考虑到内存? 在单个项目视图中,我有 2 个 UILabel、1 个图像(每个项目视图不同)和 1 个背景图像(每个项目视图相同)。任何人都可以估计我的轮播在给定时间可以支持的总可能项目视图吗?如果它可以是 100 左右,那么我可以承受 100 后的重新加载闪烁。但我不想在滚动 20 后拥有它。

【问题讨论】:

github.com/nicklockwood/iCarousel 我知道类是什么,我请你看看它提供的方法。我不应该说delegate,但实际上这是您需要查看的data source 方法。 它的方法我也很清楚。我正在寻找的是以前已经完成并且已知性能更好的合乎逻辑的地方。 你真的看到闪烁了吗?您应该尽可能多地重用视图(iCarousel 提供帮助)。最好不要在滚动时更改视图计数。是什么触发了您重新加载的要求? 不会加载 200 个视图。运行测试 - 记录每个视图的指针,并查看重用视图时有多少唯一性。它应该接近任何时候屏幕上的观看次数。 【参考方案1】:

不会加载 200 个视图。当您滚动时,您将被要求提供视图并给出索引。如果提供了可重用的视图,请使用它。如果没有,请创建一个新的。你应该告诉轮播有多少视图(200+,而不仅仅是 10,然后改变)。如果您正确地重用视图,轮播将管理内存。您可以运行测试,记录每个视图的指针,并查看重用视图时有多少唯一性。它应该接近任何时候屏幕上的观看次数。

【讨论】:

以上是关于如何沿滚动动态加载带有项目的iOS iCarousel的主要内容,如果未能解决你的问题,请参考以下文章

使用带有动态渲染项目的 UIScrollView 消除滚动滞后

使用自动布局iOS以编程方式滚动到特定页面/位置

Selenium:在动态加载网页中滚动到页面末尾

IOS Toolbarbutton项目不触发带有滚动条的动作

UIScrollView 中的 ICarousel

前端Vue项目:旅游App-(16)home+hooks:窗口滚动到底部动态加载新数据抽取到hook