IOS:具有无限分页视图的UIScrollView

我有一个滚动视图的代码showe 3图像:

const CGFloat kScrollObjHeight = 150.0; const CGFloat kScrollObjWidth = 320.0; const NSUInteger kNumImages = 3; - (void)layoutScrollImages { UIImageView *view = nil; NSArray *subviews = [scrollView1 subviews]; // reposition all image subviews in a horizontal serial fashion CGFloat curXLoc = 0; for (view in subviews) { if ([view isKindOfClass:[UIImageView class]] && view.tag > 0) { CGRect frame = view.frame; frame.origin = CGPointMake(curXLoc, 0); view.frame = frame; curXLoc += (kScrollObjWidth); } } // set the content size so it can be scrollable [scrollView1 setContentSize:CGSizeMake((kNumImages * kScrollObjWidth), [scrollView1 bounds].size.height)]; } - (void)viewDidLoad { self.view.backgroundColor = [UIColor viewFlipsideBackgroundColor]; // 1. setup the scrollview for multiple images and add it to the view controller // // note: the following can be done in Interface Builder, but we show this in code for clarity [scrollView1 setBackgroundColor:[UIColor blackColor]]; [scrollView1 setCanCancelContentTouches:NO]; scrollView1.indicatorStyle = UIScrollViewIndicatorStyleWhite; scrollView1.clipsToBounds = YES; // default is NO, we want to restrict drawing within our scrollview scrollView1.scrollEnabled = YES; // pagingEnabled property default is NO, if set the scroller will stop or snap at each photo // if you want free-flowing scroll, don't set this property. scrollView1.pagingEnabled = YES; scrollView2.pagingEnabled = YES; scrollView3.pagingEnabled = YES; // load all the images from our bundle and add them to the scroll view NSUInteger i; for (i = 1; i <= kNumImages; i++) { NSString *imageName = [NSString stringWithFormat:@"image%d.jpg", i]; UIImage *image = [UIImage imageNamed:imageName]; UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; // setup each frame to a default height and width, it will be properly placed when we call "updateScrollList" CGRect rect = imageView.frame; rect.size.height = kScrollObjHeight; rect.size.width = kScrollObjWidth; imageView.frame = rect; imageView.tag = i; // tag our images for later use when we place them in serial fashion [scrollView1 addSubview:imageView]; //[scrollView2 addSubview:imageView]; //[scrollView3 addSubview:imageView]; [imageView release]; } [self layoutScrollImages]; // now place the photos in serial layout within the scrollview } 

但是现在我想做一个滚动视图,当滚动视图的第一个图像之后显示我时,如果我返回时显示第一个图像,则显示最后一个图像。 所以我想创build一个寻呼循环。

基本的想法是将自己设置为一个UIScrollViewDelegate,并将一些模运算应用于滚动位置,以包装它。

这个想法有两个基本的变化。 假设你的图像是A,B,C,所以你现在把它们放在按ABCsorting的scrollview中。

在更合乎逻辑的解决scheme – 特别是如果你有很多很多的图像 – 你看滚动的位置,一旦它的视图被推向右,C已经离开屏幕的位置,你重新sorting图像为CAB,并将当前滚动位置向右移动一个点,以使用户看不到移动。 换句话说,滚动位置被限制在两个屏幕区域,以B的中间为中心(所以,你可以得到全部的B和两边的屏幕)。 每当你将它从左边的某个地方包装到右边的某个地方时,你将所有的图像视图向右移动一个地方。 反之亦然。

在稍微容易实现的变化,而不是创build一个图像排列ABC的滚动视图,安排然后作为CABCA。 然后应用相同的环绕逻辑,但四个屏幕的中心区域,不要做任何意见重新洗牌。

确保只使用setContentOffset:或者像scrollView.contentOffset =的点符号)作为setter。 setContentOffset:animated:将取消速度。