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张图片修改一下名称即可!