1、前面两章讲的都是基本的用法,这次讲一下比较重要的功能分页和自动播放
2、UIPageControl--分页
2.1只要将UIScrollView的pageEnabled属性设置为YES,UIScrollView会被分割成多个独立页面,里面的内容就能进行分页展示,一般会配合UIPageControl增强分页效果,UIPageControl常用属性如下
1)一共有多少页
@property(nonatomic) NSInteger numberOfPages;
2)当前显示的页码
@property(nonatomic) NSInteger currentPage;
3)只有一页时,是否需要隐藏页码指示器
@property(nonatomic) BOOL hidesForSinglePage;
4)其他页码指示器的颜色
@property(nonatomic,retain) UIColor *pageIndicatorTintColor;
5)当前页码指示器的颜色
@property(nonatomic,retain) UIColor *currentPageIndicatorTintColor;
3、NSTimer
3.1、NSTimer叫做“定时器”,它的作用如下:
1)在指定的时间执行指定的任务
2)每隔一段时间执行指定的任务
3.2、调用下面的方法就会开启一个定时任务
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget
selector:(SEL)aSelector
userInfo:(id)userInfo
repeats:(BOOL)yesOrNo;
每隔ti秒,调用一次aTarget的aSelector方法,yesOrNo决定了是否重复执行这个任务
3.3、通过invalidate方法可以停止定时器的工作,一旦定时器被停止了,就不能再次执行任务。只能再创建一个新的定时器才能执行新的任务
- (void)invalidate;
4、大体思路:
在前面+最后一张,在最后面+第一张,也就是说如果你有三张图片的话在第0个位置放最后一张,在第4个位置放第一张,总共的contentsize是imageNum+ 2。
代码如下:
1 - (void)viewDidLoad { 2 [super viewDidLoad]; 3 //初始化scrollView 4 [self setupScrollView]; 5 //初始化pageControl 6 [self setupPageControl]; 7 } 8 - (void)setupScrollView 9 { 10 _fzhScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 64, SCREEN_WIDTH, 200)]; 11 12 _fzhScrollView.contentSize = CGSizeMake(SCREEN_WIDTH * (imageNum +2) , 0); 13 14 for (int i = 0; i<imageNum + 2; i++) { 15 UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(i * SCREEN_WIDTH, 64, SCREEN_WIDTH, 200)]; 16 if (i == 0) { 17 imageView.image = [UIImage imageNamed:@"3.jpg"]; 18 }else if (i == imageNum + 1){ 19 imageView.image = [UIImage imageNamed:@"1.jpg"]; 20 }else{ 21 imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg",i]]; 22 } 23 [_fzhScrollView addSubview:imageView]; 24 } 25 26 _fzhScrollView.contentOffset = CGPointMake(SCREEN_WIDTH, 0); 27 _fzhScrollView.bounces = NO; 28 _fzhScrollView.showsHorizontalScrollIndicator = NO; 29 _fzhScrollView.pagingEnabled = YES; 30 _fzhScrollView.delegate = self; 31 //添加定时器 32 [self addTimer]; 33 [self.view addSubview:_fzhScrollView]; 34 35 } 36 /** 37 * 添加定时器 38 */ 39 - (void)addTimer 40 { 41 self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextImage) userInfo:nil repeats:YES]; 42 [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes]; 43 } 44 /** 45 * 移除定时器 46 */ 47 - (void)removeTimer 48 { 49 [self.timer invalidate]; 50 self.timer = nil; 51 } 52 - (void)nextImage 53 { 54 //1.计算page 55 int page = 0; 56 if (_pageCtl.currentPage == imageNum - 1) { 57 page = 0; 58 } else { 59 page = (int)_pageCtl.currentPage + 1; 60 } 61 //如果在第0个位置,把滑动位置设置为最后一张 62 if (_fzhScrollView.contentOffset.x == 0) { 63 _fzhScrollView.contentOffset = CGPointMake(imageNum * SCREEN_WIDTH, 0); 64 //如果在第imageNum + 1个位置,把滑动位置设置为第一张 65 }else if (_fzhScrollView.contentOffset.x == (imageNum + 1) * SCREEN_WIDTH){ 66 _fzhScrollView.contentOffset = CGPointMake(SCREEN_WIDTH, 0); 67 }else{ 68 CGFloat offsetX = _fzhScrollView.contentOffset.x; 69 offsetX = offsetX + SCREEN_WIDTH; 70 _fzhScrollView.contentOffset = CGPointMake(offsetX, 0); 71 } 72 } 73 //创建分页控制器 74 - (void)setupPageControl 75 { 76 _pageCtl = [[UIPageControl alloc]initWithFrame:CGRectMake(0, 400, SCREEN_WIDTH, 60)]; 77 78 _pageCtl.numberOfPages = imageNum; 79 80 _pageCtl.backgroundColor = [UIColor blackColor]; 81 82 [self.view addSubview:_pageCtl]; 83 84 } 85 86 #pragma mark ---UIScrollViewDelegate 87 /** 88 * 当scrollView正在滚动就会调用 89 */ 90 - (void)scrollViewDidScroll:(UIScrollView *)scrollView 91 { 92 //如果在第0个位置,把滑动位置设置为最后一张 93 if (_fzhScrollView.contentOffset.x == 0) { 94 _fzhScrollView.contentOffset = CGPointMake(imageNum * SCREEN_WIDTH, 0); 95 _pageCtl.currentPage = imageNum; 96 //如果在第imageNum + 1个位置,把滑动位置设置为第一张 97 }else if (_fzhScrollView.contentOffset.x == (imageNum + 1) * SCREEN_WIDTH){ 98 _fzhScrollView.contentOffset = CGPointMake(SCREEN_WIDTH, 0); 99 _pageCtl.currentPage = 0; 100 }else{ 101 102 _pageCtl.currentPage = (scrollView.contentOffset.x + SCREEN_WIDTH * 0.5)/SCREEN_WIDTH -1; 103 } 104 105 } 106 /** 107 * 开始拖拽的时候调用 108 */ 109 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 110 { 111 // 停止定时器(一旦定时器停止了,就不能再使用) 112 [self removeTimer]; 113 } 114 115 /** 116 * 停止拖拽的时候调用 117 */ 118 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 119 { 120 // 开启定时器 121 [self addTimer]; 122 }
demo:下载地址:https://github.com/fengzhihao123/FZHAutoScrollView;
tip:如果出现图片不存在的错误,自己再拖拽进3张图片修改一下名称即可!