UIScrollView 无限滚动不分页

Posted

技术标签:

【中文标题】UIScrollView 无限滚动不分页【英文标题】:UIScrollView inifinite scroll without paging 【发布时间】:2011-09-24 23:38:48 【问题描述】:

这里的第一个问题,很好:P

我正在尝试制作一个无限的 UIScrollView(我使用了“StreetScroller”苹果演示项目)。当 UIScrollView 快到 contentSize 的末尾时,将 contentOffset 设置为 contentSize 的中心,并移动所有子视图,以便对用户透明。

当你缓慢滚动时它可以正常工作,但是当你滚动太快并且到达 UIScrollView 的末尾时,事情变得很奇怪。

在我的例子中,我使用 UIScrollView,frame.size.width = 320 和 contentSize.x = 3 * frame.size.width。 这就是当您滚动太快并且到达 contentSize 末尾时日志中发生的情况(因此,如果向右滚动时 x > 560):

--> UIScrollView 因为惯性而滚动

SetContentOffset called width x : 504.730072
SetContentOffset called width x : 516.878967
SetContentOffset called width x : 528.489990
SetContentOffset called width x : 540.347656
SetContentOffset called width x : 550.754028
SetContentOffset called width x : 561.200378

--> UIScrollView 到达 contentSize 的末尾,所以我们重新定位

The next call of setContentOffset is for recentering the view
SetContentOffset called width x : 320.000000

--> 问题来了,UIScrollView 没有考虑 contentOffset.x 的变化,它使用最后使用的 contentOffset.x 值继续动画......

SetContentOffset called width x : 571.421753
The next call of setContentOffset is for recentering the view
SetContentOffset called width x : 320.000000
SetContentOffset called width x : 581.283447
The next call of setContentOffset is for recentering the view
SetContentOffset called width x : 320.000000
SetContentOffset called width x : 610.100952

这会一直持续到动画结束。

如果有人有解决方案来设置 contentOffset 并强制 UIScrollView 更新其动画:)

我几乎阅读了 *** 和其他网站上关于无限 UIScrollView 的所有主题,但我没有看到任何在动画期间更改 contentOffset 的有效解决方案,我尝试在所有不同的 UIScrollView 委托方法中重新定位。而且我不想在滚动过程中更改 contentSize(它仅在您向右滚动或下滚动时才有效......)

【问题讨论】:

【参考方案1】:

我刚刚在 ios Simulator 4.3 中运行的 Apple StreetScroller 示例中注意到了这个问题。

我在这里看到了这个问题:Infinite UIScrollView gets strange behavior in iOS4.3 not iOS5,刚刚在 iOS 5 模拟器中进行了测试,可以确认它在那里按预期运行。

不知道 4.3 中的相同代码有什么问题。

【讨论】:

以上是关于UIScrollView 无限滚动不分页的主要内容,如果未能解决你的问题,请参考以下文章

在无限 UIScrollView 中跨页面拖动视图

使用三个视图的无限循环分页 UIScrollView

UIScrollView 无限滚动 setContentOffset

如何同步无限的 UIScrollView?

利用递归 实现UIScrollView无限滚动的效果

在 Swift 中使用 UIScrollView 进行无限循环滚动