UIScrollView与UIPageController结合使用实现轮播

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UIScrollView与UIPageController结合使用实现轮播相关的知识,希望对你有一定的参考价值。

  1 #import "ViewController.h"
  2 #define WIDTH self.view.frame.size.width
  3 #define HEIGHT self.view.frame.size.height
  4 @interface ViewController ()<UIScrollViewDelegate>
  5 @property (strong,nonatomic) UIImageView *imageView;
  6 @property (strong,nonatomic) UIScrollView *scroll;
  7 @property (strong,nonatomic) UIPageControl *pageControl;
  8 @end
  9 
 10 @implementation ViewController
 11 
 12 - (void)viewDidLoad {
 13     [super viewDidLoad];
 14     self.view.backgroundColor = [UIColor grayColor];
 15     //创建一个和屏幕等尺寸的ScorllView
 16     _scroll = [[UIScrollView alloc] initWithFrame:self.view.frame];
 17     _scroll.backgroundColor = [UIColor yellowColor];
 18     //重要:水平方向滚动位置,contentSize--滚动范围
 19     _scroll.contentSize = CGSizeMake(WIDTH * 7, 0);
 20     
 21     //重要---按页来滚动
 22     _scroll.pagingEnabled = YES;
 23     //关闭屏幕回弹效果
 24     _scroll.bounces = NO;
 25     //关闭滚动条
 26     _scroll.showsHorizontalScrollIndicator = NO;
 27     //非常重要-偏移量
 28 #pragma ************如果下边这一句不注掉那么运行工程的时候系统会自动偏移一次,从而会显示第二张图片
 29     //_scroll.contentOffset = CGPointMake(WIDTH, 0);
 30     //垂直方向的滚动范围
 31     _scroll.contentSize = CGSizeMake(WIDTH * 7, 0);
 32     _scroll.maximumZoomScale = 2;
 33     _scroll.minimumZoomScale = 0.5;
 34 
 35     //水平方向的视图摆放
 36     for (int i = 1; i < 8; i++) {
 37         //创建小的scrollView
 38         UIScrollView *scroll2 = [[UIScrollView alloc]initWithFrame:CGRectMake((i - 1) * WIDTH, 0, WIDTH, HEIGHT)];
 39        
 40         //循环创建视图,添加到srollView上
 41         self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, WIDTH, HEIGHT)];
 42         self.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"h%d.jpeg",i]];
 43         [scroll2 addSubview:self.imageView];
 44         //一定要记得为每个小的scroll添加代理,否则不能实现缩放
 45         scroll2.delegate = self;
 46         scroll2.maximumZoomScale = 2;
 47         scroll2.minimumZoomScale = 0.5;
 48          [_scroll addSubview:scroll2];
 49     }
 50 //        //垂直方向的偏移量
 51 //    _scroll.contentOffset = CGPointMake(0, HEIGHT);
 52 //    for (int i = 1; i < 8; i++) {
 53 //        UIScrollView *scroll2 = [[UIScrollView alloc] initWithFrame:CGRectMake(0, (i - 1) * HEIGHT, WIDTH, HEIGHT)];
 54 //        [_scroll addSubview:scroll2];
 55 //        //self.imageView.frame = self.view.frame;
 56 //        self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, WIDTH, HEIGHT)];
 57 //        self.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"h%d.jpeg",i]];
 58 //        [scroll2 addSubview:self.imageView];
 59 //    }
 60     
 61 //    self.scroll.maximumZoomScale = 2;
 62 //    self.scroll.minimumZoomScale = 0.5;
 63     
 64     [self.view addSubview:_scroll];
 65     _scroll.delegate = self;
 66     //添加手势,双击屏幕,缩放回到原型
 67     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(setScrollZoom)];
 68     tap.numberOfTapsRequired =2;
 69     [self.scroll addGestureRecognizer:tap];
 70     
 71     
 72     _pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, HEIGHT - 80, WIDTH, 40)];
 73     _pageControl.numberOfPages = 7;
 74     _pageControl.pageIndicatorTintColor = [UIColor redColor];
 75     //当前页指示器(也就是小点点)的颜色
 76     _pageControl.currentPageIndicatorTintColor = [UIColor greenColor];
 77     [self.view addSubview:_pageControl];
 78     [_pageControl addTarget:self action:@selector(pagAction:) forControlEvents:UIControlEventValueChanged];
 79   
 80    
 81 }
 82 //实现代理里的缩放
 83 -(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
 84 {
 85     _scroll.subviews[0].center = self.view.center;
 86     return scrollView.subviews[0];
 87 }
 88 #pragma mark - page的响应事件
 89 
 90 - (void)pagAction:(UIPageControl *)sender{
 91     //根据paged当前的小圆点算出现在在显示的是第几张图片,从而改变偏移量   setContentOffset(跳转至指定的页面)
 92     [self.scroll setContentOffset:CGPointMake(self.pageControl.currentPage * WIDTH, 0) animated:YES];
 93     [self setScrollZoom];
 94 }
 95 #pragma mark - 把所有的小scrollView的缩放比例变为1,也就是改回原型
 96 - (void)setScrollZoom{
 97     //当减速结束的时候,那张图回复原样
 98     //把所有的imv的缩放比例设置为1
 99     for (UIScrollView *s in self.scroll.subviews) {
100         if ([s isKindOfClass:[UIScrollView class]]) {
101             [s setZoomScale:1 animated:NO];
102         }
103     }
104 }
105 
106 
107 
108 
109 
110 -(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
111 {
112     NSLog(@"开始拖拽的时候触发");
113 }
114 #pragma mark--UIScrollView 滚动协议方法
115 -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
116 {
117     [self setScrollZoom];
118     NSLog(@"结束拖拽时触发");
119 }
120 
121 
122 
123 -(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
124 {
125     NSLog(@"开始减速时触发");
126 }
127 #pragma mark -scroll的代理方法,减速结束
128 -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
129 {
130     //根据偏移量算出现在在显示的是第几张图片,从而改变paged当前的小圆点
131     self.pageControl.currentPage = self.scroll.contentOffset.x/WIDTH;
132     [self setScrollZoom];
133     NSLog(@"减速完成时触发");
134 }
135 
136 - (void)didReceiveMemoryWarning {
137     [super didReceiveMemoryWarning];
138     // Dispose of any resources that can be recreated.
139 }
140 
141 @end

 

以上是关于UIScrollView与UIPageController结合使用实现轮播的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 与 UIScrollView

UIScrollView SetContentSize 与自动布局

如何使 UIButton 与 UIScrollView 一起移动

UIScrollView 与 UINavigationBar 的动态大小

UITableViewCell 与 UIScrollView 防止单元格触摸

UIScrollView - 检测layoutSubviews中的滚动与方向变化?