循环滚动的UIScrollView

7
我有一个带有图片的UIScrollView。当用户到达最后一张图片并向右滑动手指去看下一页时,我想要展示第一张图片。同样地,当用户在第一张图片处并向左滑动手指去看上一页时,我想要展示最后一张图片。简而言之,这是一种循环的方式。

我该如何实现呢?

2个回答

6
您需要使用contentOffset和contentSize进行操作。
每次滚动事件发生时,您可以考虑检查用户是否在当前长度-1处,如果是,则动态向滚动视图添加一个图像。
这对于超过5个图像的情况应该有效,但是如果您不释放早期的图像,则可能会在内存方面遇到麻烦。
我认为此解决方案不适用于索引小于0的图像。
另一种方法是... 假设您有图像I1到I5。 使用以下图像布局滚动视图: I5 I1 I2 I3 I4 I5 I1
自动滚动到I1(I5的高度),没有动画效果。
如果用户滚动到此标记以上,请将其自动滚动(无动画)到第二个I5 I1对。 如果用户尝试在接近结尾的地方向下滚动I5附近,则可以将其自动滚动回第一个I5 I1对。 如果您以正确的高度且不带动画滚动,则看起来图像是无限的。
我不确定这是否非常灵敏,但它可能会产生您想要的效果。

这基本上就是我在其中一个应用程序中所做的。它运行良好。 - Airsource Ltd
3
如果您需要视图的移动是连续的,那么这种方法不适用。除非您能够以特定的速度滚动到某个位置。 - Dimitris

2
重要的是要认识到UIScrollView非常智能,它会自行重新绘制。只要屏幕上可见的视图不移动或更改,您可以移动其子视图而无需进行重绘。您可以重置任何屏幕外子视图的框架(如有必要,请调整contentOffset)而不会导致重绘。当然,启用分页会使此过程变得更加容易,但我相信您也可以从didScroll中实现它。您应该生成5个视图并将它们添加为子视图,并将滚动视图的偏移量设置为这五个视图的中心。随着scrollView的滚动,您可以切换子视图-就像循环一样。没有必要删除和重新添加子视图,您可以只重置框架。这是(在简单的级别上)UITableView的工作原理-它重用一小组单元格视图并不断重置内容偏移量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接