ios - 使 UIScrollView 平滑滚动

Posted

技术标签:

【中文标题】ios - 使 UIScrollView 平滑滚动【英文标题】:ios - Making UIScrollView scroll smoothly 【发布时间】:2012-06-06 12:34:26 【问题描述】:

在我的 iPad 应用程序中,我有一个滚动视图,其中列出了 20 个视频专辑的图像。服务器将发送 20 张图片的列表。 现在,当用户到达滚动视图的末尾时,我必须发送请求以获取接下来的 10 个视频详细信息。 获取数据后,我想将它们添加到最后的滚动视图中。但我想删除一开始的10个视频。这样一次滚动视图将始终只显示 20 个视频详细信息。 当用户再次滚动到末尾时,我将向服务器发送请求,获取接下来的 10 个视频详细信息并将它们添加到滚动视图中,从滚动视图中删除 10 个开始视频详细信息......当用户滚动到开始我将获取 10 个以前的视频并重复相同的内容。 在这里,我想确保滚动必须平滑并且不想在滚动视图中有闪烁。有人可以建议使用更好的滚动视图编码来满足我的要求吗?

【问题讨论】:

【参考方案1】:

如果您的代码中包含scroll.pagingEnabled = YES; 那么请删除这部分代码。 一定会成功的。

【讨论】:

【参考方案2】:

这里真正的问题在于设置细胞回收。这并不难,我有几个你可以看的例子,一个是here。当然,您需要对该代码进行一些更改,它是在“页面”中设置的——任何时候屏幕上只有一个视图,我认为这不是您想要的。

除此之外……

您的关键部分是设计您的数据源,以允许删除旧项目并添加新项目,而不会跳过项目。

例如,我可能会采用的方法是在滚动视图中呈现“最后一个”项目,就像您希望滚动视图中的第一个项目一样。当用户到达最后一项时,将您的内容偏移设置为没有动画的滚动视图的开头(实际上还没有尝试过,所以可能会有您不想要的颠簸,测试并查看)。这将产生无限滚动的外观。您的数据源会在添加新项目时简单地覆盖旧索引,而不是添加到例如数组的末尾。

【讨论】:

【参考方案3】:

如果您以网格视图的形式进行演示,我建议您查看AQGridView。该网格视图支持单元格排队和出队,这正是您所描述的。

您也可以使用委托方法scrollViewDidScroll: 来确定您是否在滚动视图的底部并触发下一组专辑的下载。

【讨论】:

以上是关于ios - 使 UIScrollView 平滑滚动的主要内容,如果未能解决你的问题,请参考以下文章

Flutter ListView.Builder 导致滚动不连贯。如何使滚动平滑?

如何使在Swift中使用UIScrollView进行滚动和缩放

IOS:CADisplay / UIScrollview 和导航控制器

尽管没有使用Autolayout,但垂直滚动在UIScrollView和iOS7以及Xcode 5中不起作用

不使用 UIScrollView 滚动屏幕

UIScrollview 不会一直滚动