UIScrollView滚动视图

  滚动视图

//创建对象

UIScrollView  *scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0,0,375,667)];

//滚动视图的背景颜色

scrollView。backgroundColor = 

//设置内容区域

//非常重要是一个属性决定滚动视图是垂直滑动还是水平滑动

scrollView。contentSize = CGSizeMake(375 * 3, 667);//水平滑动,内容区域为三个屏幕的宽

//设置偏移量,决定了一上来显示的是哪一张图,是非常重要的属性  我们之后学习的循环滚动全部是根据这一属性

scrollVIew。contentOffset = CGPointMake(0,0);

 

//设置是否整屏翻动(以视图的宽为基准)

//默认为NO

scrollView。pagingEnabled = YES;

 

//设置边界是否回弹

//默认的是YES  设置成NO之后  第一张手势向右滑不动 最后一张手势向左滑不动

scrollView。bounces = NO;

 

//如果设置成垂直滑动的时候  点击状态栏 会回到顶部是系统自带的属性默认是YES  滚动视图必须是垂直滚动

scrollView。scrollsToTop = YES;

 

//设置水平滚动条是否显示 默认是YES

scrollView。showsHorizontalScrollIndicator = NO;

 

//设置垂直滚动条是否显示

scrollView。showsVerticalScrollIndicator = NO;

 

//设置代理--UIScrollViewDelegate

scrollView。delegate = self;

 

//设置最小缩放比例

scrollView。minimumZoomScale = 0.5;

 

//设置最大放大比例

scrollView。maximumZoomScale = 2;

 

//将滚动视图添加到根视图上

 

二  在UIScrollView上循环创建三张imageView

for (int i= 0;i < 3; i ++){

//先创建三张小的scrollView  每个上面添加一张imageVIew,用于每张图片都可以实现放大和缩小

UIScrollView *smallScrollView = [UIScrollView  alloc]initWithFrame:CGRectMake(375 * i ,0,375, 667)];

//设置代理

smallScrollView。delegate = self;

//scrollview 自带放大缩小功能

//设置最小缩放比例,最大缩放比例

[scrollView   addSubview:smallScrollView];

 

//设置循环imageView 

NSString *imageName = [NSString stringWithFormat:@“%d。png”,i + 1];//图片名称

UIImageView *imageView = [UIImageView  alloc]initWithImage:[UIImage  imageNamed:imageName];

imageView。frame = 

[smallScrollView addSubview:imageView];

}

 

三  UIPageControl  ----分页视图

UIPageControl  *page = []

//page 的背景颜色

page,backgroundColor = [UIColor  brownColor];//棕色

//设置有几个分页

page。numberOfPages = 3;

 

//设置当前小圆点的颜色

page。currentPageIndicatorTintColor = [];

 

//设置非当前小圆点的颜色

page。pageIndicatorTintColor = 

 

//设置当前页(重要属性)

//一定要用在设置分页之后

page。currentPage = 0;//页码是从0开始数的

 

//添加事件

//pageControl 都是和scrollView结合使用的

//page 的当前页要和scrollView 偏移量对应上

[page   addTarget:self  action:@selector(pageAction:)forControlEvents:UIControlEventValueChanged];

 

[self.view   addSubview:page];

 

#pragma mark --- pageControl触发事件 ---

- (void)pageAction:(UIPageControl *)page

{

   // NSLog(@"娃哈哈");

    // 取出大S 根据page的当前页 改变大S的偏移量

    UIScrollView *bigScrollView = self.view.subviews[0];

    // NSLog(@"%ld", page.currentPage);

    // 偏移量X = 当前页 * 视图的宽

     bigScrollView.contentOffset = CGPointMake(page.currentPage * 375, 0);

    

    // 添加滑动 图片动画效果

    //[bigScrollView setContentOffset:CGPointMake(page.currentPage * 375, 0) animated:YES];

}

 

 

#pragma mark --- 允许哪个视图可以进行缩放 ---

// 我们放大缩小的一般情况下 是一张图片

// 我们要将大的scrollView上面 放小的scrollView 然后在每一个小的scrollView上面放一张图片 这样 每一张图片都可以进行缩放

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView

{

    return scrollView.subviews[0];//缩放的是小的滚动视图,小的滚动视图缩放后对应多imageView也缩放

}

 

#pragma mark --- 进行缩放会被触发的方法(根据中心点进行缩放)--

- (void)scrollViewDidZoom:(UIScrollView *)scrollView

{

   // NSLog(@"进行缩放");

    

    // 取出小scrollViewimageView,方法中的scrollView就是小的,只有小的才进行缩放,然后下面取的也是小的子视图

    // 缩小的情况下才根据中心点缩小

    // 放大的情况下 不需要根据中心店放大

    if(scrollView.zoomScale <= 1)

    {

        UIImageView *imageView = scrollView.subviews[0];

        imageView.center = CGPointMake(scrollView.frame.size.width / 2, scrollView.frame.size.height / 2);

    }

    

 

 

 

// 代理方法的执行顺序

// 开始拖拽 -> 滚动 -> 结束拖拽 -> 开始减速 -> 滚动 -> 结束减速

#pragma mark --- 开始滚动会触发的方法 ---

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

   // NSLog(@"开始滚动");

}

#pragma mark --- 开始拖拽会触发的方法 ---

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

{

   // NSLog(@"开始拖拽");

}

#pragma mark --- 结束拖拽会触发的方法----

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

{

   // NSLog(@"结束拖拽");

}

#pragma mark --- 开始减速 ---

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView

{

   // NSLog(@"开始减速");

    

}

#pragma mark --- 结束减速 ----

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

{

//    NSLog(@"结束减速");

//    // 取出page 根据scrollX 改变当前页

//    UIPageControl *page = self.view.subviews[1];

//    // 当前页 = s的偏移量X / 视图的宽

//    page.currentPage = scrollView.contentOffset.x / 375;

    

//    UIScrollView *bigScrollView = self.view.subviews[0];

//    if(![bigScrollView isEqual:scrollView])

//    {

//        return;

//    }

 

    UIPageControl *page = self.view.subviews[1];

    page.backgroundColor = [UIColor redColor];

    for (UIScrollView *smallScrollView in scrollView.subviews)

    {

        if (page.currentPage != scrollView.contentOffset.x / 375)

        {

            smallScrollView.zoomScale = 1;

        }

    }

    

    page.currentPage = scrollView.contentOffset.x / 375;

 

    // S和小S 都设置了代理 当我们把视图缩小的时候 传进来的参数是我们的大S 此时大S 装的是小S 所以能够调用zoomScale 方法

    // 当我们把视图放大的时候 S的内容 会被撑大 那么滚动就是小S 传进来的参数 也是

    /*

    UIScrollView *bigScrollView = self.view.subviews[0];

    if(![bigScrollView isEqual:scrollView])

    {

        return;

    }

    for (UIScrollView *smallScrollView in scrollView.subviews)

    {

        smallScrollView.zoomScale = 1;

    }

*/

}

 

 

 

 

 

 

posted @ 2016-02-23 20:51  mingxing  阅读(146)  评论(0编辑  收藏  举报