当前位置: 首页 > 工具软件 > PageControl > 使用案例 >

解决pageControl页面设置无效问题

公孙棋
2023-12-01

 废话不多说,先上代码

1.添加pageViewControl

 1 - (void)addPageControl {
 2     
 3     UIPageControl *pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(100, 100, 130, 15)];
 4     _pageControl = pageControl;
 5     
 6     //设置当前页面和费当前页面的pageControl的圆点颜色
 7     pageControl.pageIndicatorTintColor = [UIColor greenColor];
 8     pageControl.currentPageIndicatorTintColor = [UIColor blueColor];
 9     
10     // 1.设置pageControl单页的时候是否隐藏
11     pageControl.hidesForSinglePage = YES;
12     
13     // 2.设置pageControl显示的图片(KVC)
14     [pageControl setValue:[UIImage imageNamed:@"current"] forKeyPath:@"_currentPageImage"];
15     [pageControl setValue:[UIImage imageNamed:@"other"] forKeyPath:@"_pageImage"];
16     
17     // 3.设置总页数(一定要在初始化UIPageControl对象时设置页数,不然不显示!!!!!!!!!!!!)
18     _pageControl.numberOfPages = self.imageNames.count;
19     
20     [self.view addSubview:pageControl];
21 
22 }

     注意: 一定要在初始化UIPageControl对象时设置页数,不然不显示!

2.添加定时器,定时滚动

 1   #pragma mark - 定时器的相关方法
 2   - (void)startTimer {
 3  
 4      // 返回一个会自动执行任务的定时器
 5      self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextPage:) userInfo:@"123" repeats:YES]; 
 6  
 7      [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
 8 }
 9 
10  - (void)stopTimer {
11  
12      [self.timer invalidate];  
13  
14  }
15  
16   // 滚动到下一页
17  - (void)nextPage:(NSTimer *)timer{
18  
19      // 计算下一页页码
20      NSInteger page = self.pageControl.currentPage + 1;
21  
22      // 超过最后一页
23      if (page == self.imageNames.count) {
24          page = 0;
25      }
26  
27      // 滚动到下一页
28      [_pageScrollView setContentOffset:CGPointMake(page * _pageScrollView.frame.size.width, 0) animated:YES];
29  
30  }

 

3.遵守 UIScrollViewDelegate, 监听滚动的状况, 以便通过crollView.contentOffset.x 来计算页码

 1 #pragma mark - UIScrollViewDelegate
 2 
 3 - (void)scrollViewDidScroll:(UIScrollView *)scrollView{
 4 
 5     // 计算页码
 6     NSUInteger page = (int)(scrollView.contentOffset.x / scrollView.frame.size.width + 0.5); 
 7 
 8     // 设置页码
 9     _pageControl.currentPage = page;
10 
11 }
12 
13 //  用户即将开始拖拽scrollView,停止定时器
14 
15 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
16 
17     [self stopTimer];
18 
19 }
20 
21 //用户已经停止拖拽scrollView,开启定时器
22 
23 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
24 
25     [self startTimer];
26 
27 }

总结:通过以上代码可以看出, 页码的控制是通过 scrollView.contentOffset.x来计算的, 充分借助了 UIScrollViewDelegate中的代理方法, 准确计算位移。

求关注

个人博客:http://www.cnblogs.com/loveDodream-zzt/

Demo:https://github.com/ZTV587/ZTCarouselAD (这个Demo是用XIB搭建的, 纯代码见本文)

 

转载于:https://www.cnblogs.com/loveDodream-zzt/p/6089347.html

 类似资料: