带有“循环”滚动的UIScrollView

我正在尝试在我的UIScrollView中使“循环”滚动,但不成功。

我想做什么:如果uiscrollview到达结束,它应该移动到开始,如果uiscrollview在开始和移回来,它应该移动到结束

添加滚动视图是不好的方式在我的情况(其他方法应该得到“页面ID”)

你有什么想法吗?

我已经实现了这个方法,但它需要分页启用 。 假设你有五个元素A,B,C,D and E 当你设置你的视图时,你将最后一个元素添加到开始,第一个元素添加到结束,并调整内容偏移量来查看第一个元素,如E,[A],B,C,D,E,A 在UIScrollViewDelegate中,检查用户是否到达任何一端,并将没有animation的偏移量移动到另一端。

想象一下[]表示正在显示的视图:

 E,A,B,C,[D],E,A 

用户滑动正确

 E,A,B,C,D,[E],A 

用户滑动正确

 E,A,B,C,D,E,[A] 

然后,自动将内容偏移设置为第二个元素

 E,[A],B,C,D,E,A 

这样用户就可以滑动两种方式创build无限滚动的幻觉。

 E,A,[B],C,D,E,A 

更新

我已经上传了这个algorithm的一个完整的实现 。 这是一个非常复杂的类,因为它也有点击select,无限循环滚动和单元重用。 您可以按原样使用代码,修改代码或提取您需要的代码。 最有趣的代码是在类TCHorizontalSelectorView

链接到文件

好好享受!


更新2

UICollectionView现在是实现这一目的的推荐方式,它可以用来获得相同的行为。 本教程详细介绍了如何实现它。

苹果有一个街头滚动演示,似乎有你想要的。

还有一个来自WWDC 2011的video ,演示了他们的演示。 ;)他们涵盖video中的第一个无限滚动。

尝试使用以下代码

示例代码

 - (void)scrollViewDidEndDecelerating:(UIScrollView *)sender { if (scrollView.contentOffset.x == 0) { // user is scrolling to the left from image 1 to image n(last image). // reposition offset to show image 10 that is on the right in the scroll view [scrollView scrollRectToVisible:CGRectMake(4000,0,320,480) animated:NO];// you can define your `contensize` for scrollview } else if (scrollView.contentOffset.x == 4320) { // user is scrolling to the right from image n(last image) to image 1. // reposition offset to show image 1 that is on the left in the scroll view [scrollView scrollRectToVisible:CGRectMake(320,0,320,480) animated:NO]; } } 

希望对你有帮助…