首先,在View里放上一个UILabel,并把它的tag设置为1:
然后,新建一个Controller,在这个Controller里的View放上一个UIScrollView,frame和View一样大:
把刚才那个UIScrollView关联到Controller文件里,再开始写initView函数,初始化三个UIView,把他们添加到UIScrollView,然后设置UIScrollView宽度为三页,并让UIScrollView显示第二页:
- _pageFirst = [[[NSBundle mainBundle] loadNibNamed:@"PageView" owner:self options:nil] lastObject];
- UILabel *labelTitle = (UILabel *)[_pageFirst viewWithTag:1];
- labelTitle.text = @"fistPage";
- _pageSecond = [[[NSBundle mainBundle] loadNibNamed:@"PageView" owner:self options:nil] lastObject];
- labelTitle = (UILabel *)[_pageSecond viewWithTag:1];
- labelTitle.text = @"secondPage";
- _pageThird = [[[NSBundle mainBundle] loadNibNamed:@"PageView" owner:self options:nil] lastObject];
- labelTitle = (UILabel *)[_pageThird viewWithTag:1];
- labelTitle.text = @"thirdPage";
- [self setPageFrame];
- [_scrollView addSubview:_pageFirst];
- [_scrollView addSubview:_pageSecond];
- [_scrollView addSubview:_pageThird];
- _scrollView.pagingEnabled = YES;
- _scrollView.contentSize = CGSizeMake(_scrollView.frame.size.width * 3, _scrollView.frame.size.height);
- _scrollView.showsVerticalScrollIndicator = NO;
- _scrollView.showsHorizontalScrollIndicator = NO;
- _scrollView.delegate = self;
- //scroll to the second page
- CGPoint p = CGPointZero;
- p.x = _scrollView.frame.size.width;
- [_scrollView setContentOffset:p animated:NO];
下面是setPageFrame方法:
接下来实现UIScrollView的delegate:- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView。首先通过UIScrollView的contentOffset和frame的width属性计算得到UIScrollView滚动停止时候的显示页面,如果是第二页,则说明没有翻页,不作处理,如果是第一页或者第三页,则UIScrollView的三个subView的顺序依次向右或向左移动,并且继续让UIScrollView显示第二页:
依次向右或向左移动UIScrollView的subView方法:
本文所有代码下载链接:http://download.csdn.net/detail/i2c_rs485/4394375,我使用xcode4.3.2
参考资料:
http://www.cocoachina.com/bbs/read.php?tid=7013&page=2 cocoachina讨论
http://www.dreamingwish.com/dream-2011/uiscrollview-infinite-loop-scrolling.html 感谢Seven's!