标签:
在项目中把banner图片UIImageView一张一张的放入UIScrollView中,通过设置UIScrollView的pagingEnabled属性为YES,则可以做到当用户滑动banner时图片一张一张的显示,但当用户想从第一张图到最后一张图,或者从最后一张图到第一张图的时候就会卡住,简单点的做法就是判断用户swipe的方向,然后让UIScrollView自动滑动到最后一张或者第一张,这样做在动画中又显得不够自然,一下是解决办法
假设banner图片有3张,在banner的UIScrollView中用以下的方式进行排列
第三张 | 第一张 | 第二张 | 第三张 | 第一张 |
UIScrollView默认滚动到第二张图片的位置,当用户滑动到第一张时,则UIScrollView自动滚动到第4张去,同理当用户滑动到最后一张时,UIScrollView自动滚动到第二张去,这些滚动都设置动画效果为NO
代码如下
h文件
#import <UIKit/UIKit.h> @interface ViewController : UIViewController @property (weak, nonatomic) IBOutlet UIScrollView *mainScroll; @property (weak, nonatomic) IBOutlet UIPageControl *pageControl; @end
m文件
#import "ViewController.h" @interface ViewController ()<UIScrollViewDelegate> { CGFloat w; NSMutableArray *imgArr; NSMutableArray *pageArr; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; w = self.view.frame.size.width; //page的个数 pageArr = [NSMutableArray array]; for (int i = 1; i <= 3; i++) { [pageArr addObject:[NSString stringWithFormat:@"%d.jpg",i]]; } //重新获取imgView的个数,将显示的第最后一张图片放在第一张,而在最后一张放置显示的第一张图片 imgArr = [NSMutableArray array]; [imgArr addObject:pageArr[pageArr.count - 1]]; for (NSString *imgSrc in pageArr) { [imgArr addObject:imgSrc]; } [imgArr addObject:pageArr[0]]; self.mainScroll.contentSize = CGSizeMake(w*imgArr.count, 0); //开始塞入图片 for (int i = 0; i < imgArr.count; i++) { NSString *imgSrc = imgArr[i]; UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(i*w, 0, w, self.mainScroll.frame.size.height)]; [imgView setImage:[UIImage imageNamed:imgSrc]]; [self.mainScroll addSubview:imgView]; } self.pageControl.numberOfPages = pageArr.count; self.mainScroll.bounces = NO; self.mainScroll.pagingEnabled = YES; self.mainScroll.showsHorizontalScrollIndicator = NO; self.mainScroll.showsVerticalScrollIndicator = NO; self.mainScroll.delegate = self; //自动将scrollView移动显示的第一张图片处 [self.mainScroll setContentOffset:CGPointMake(w, 0) animated:NO]; } - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { CGFloat offsetX = scrollView.contentOffset.x; int index = offsetX/w; if (index == 0) { [self.mainScroll setContentOffset:CGPointMake(w*(imgArr.count-2), 0) animated:NO]; self.pageControl.currentPage = pageArr.count - 1; }else if (index == imgArr.count -1){ [self.mainScroll setContentOffset:CGPointMake(w, 0) animated:NO]; self.pageControl.currentPage = 0; }else{ self.pageControl.currentPage = index - 1; } } @end
标签:
原文地址:http://www.cnblogs.com/skyHF/p/4757987.html