• UIScrollView


    ⼀、UIScrollView的创建和常⽤属性
     
    • UIScrollView是UIView的⼦类,所以我们可以仿照UIView的 创建步骤创建⼀个ScrollView。
    • UIScrollView作为所有滚动视图的基类,所以学好 UIScrollView也成为学好UITableView和UICollectionView等 滚动视图的前提。
    • UIScrollView主要使⽤在滚动头条(轮播图), 相册等常见的 功能⾥。
     
    ⼆、UIScrollView的协议⽅法
     
    • 当我们签好协议,设置好代理⼈之后,我们就可以使⽤ UIScrollView的协议⽅法了,它的协议⽅法分为两部分:
    • ⼀是监控滚动时候的状态。
    • ⼆是控制视图的缩放。
     
    #pragma mark -----代理检测滚动过程时触发的方法-----

    //1、滚动过程中触发的方法
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
        NSLog(@"正在滚动");
    }

    //2、即将开始拖拽的方法,此时滚动视图即将加速
    - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
        NSLog(@"即将进行拖拽");
    }

    //3、结束拖拽的方法,不再加速
    - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
        NSLog(@"拖拽结束");
    }

    //4、即将开始减速
    - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
        NSLog(@"即将开始减速");
    }

    //5、结束减速,也就是停止滚动
    - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
        NSLog(@"结束滚动");
        //先从负责滚动的大scrollView找到他的⼦视图
        for (UIScrollView *sView in scrollView.subviews) {
            // 再根据子类的对象类型进行判断
            if ([sView isKindOfClass:[UIScrollView class]]) {
                // 把视图的尺寸恢复到原有尺寸
                sView.zoomScale = 1.0;
            }
        }
    }

    //指定缩放视图
    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
        return [scrollView.subviews firstObject];//因为scrollView内自带两个滑动视图,也是子视图,所以只能用firstObject或者objiectAtIndex:0
    }

    //缩放结束
    - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale {
        NSLog(@"%@",NSStringFromCGSize(scrollView.contentSize));
    }

    //正在缩放
    - (void)scrollViewDidZoom:(UIScrollView *)scrollView {
        //实现中心缩小
        UIImageView *imageView = [scrollView.subviews firstObject];
        if (scrollView.zoomScale <= 1.0) {
            imageView.center = CGPointMake(kWidth / 2, kHeight / 2);
        }
    }
     
    - (void)tap:(UITapGestureRecognizer *)tap {
        UIImageView *image = (UIImageView *)tap.view;
        NSLog(@"%ld",image.tag);
       
        FirstViewController *firstVC = [[FirstViewController alloc] init];
        [self.navigationController pushViewController:firstVC animated:YES];
        [firstVC release];
    }
     
    - (void)viewDidLoad {
        [super viewDidLoad];
       
        //创建滚动视图
        UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, kWidth, kHeight)];
        //设置滚动视图的相关属性
        //1、滚动区域,内容区域的大小
       
        //如果想要实现滚动操作,有三种情况:
        //1、内容视图(滚动区域)的宽大于滚动视图的宽
        //2、内容视图(滚动区域)的高大于滚动视图的高
        //3、内容视图(滚动区域)的宽和高都大于滚动视图的宽和高
       
     
    //UIScrollView⽤来控制滚动范围的重要属性contentSize,通过这个重要属性设置才可以控制视图的滚动,我们⽬标铺设9个屏幕宽度的图⽚,所以我们设置滚动范围是9个屏幕宽度contentSize有两个参数,⼀个是width,另⼀个是height,分别设置两个值有不同的效果
        scrollView.contentSize = CGSizeMake(kWidth * 9, kHeight);//横屏滚动
       
          //设置滚动视图的代理
        scrollView1.delegate = self;
     
        //滚动视图的偏移量
        scrollView.contentOffset = CGPointMake(0, 0);
       
        //整页滚动
        scrollView.pagingEnabled = YES;
       
        //关闭横向滚动条
        scrollView.showsHorizontalScrollIndicator = NO;
       
        //关闭纵向滚动条
    //    scrollView.showsVerticalScrollIndicator = NO;
       
        //关闭滚动视图的回弹效果(默认是开启的)
        scrollView.bounces = NO;
       
        //展示图片 for循环创建9个UIImageView并且添加到滚动视图上面
         for (int i = 0; i < 9; i ++) {
           
            UIImageView *imageView1 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, kWidth, kHeight)];
            imageView1.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg",i + 1]];
           
            imageView1.tag = 100 + i;
     
            //创建小scrollView
            UIScrollView * scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, kHeight * i, kWidth, kHeight)];
           
            //指定代理
            scroll.delegate = self;
     
             /*
        //如果想实现视图的缩放功能,必须指定缩放的视图以及缩放的比例
        //指定缩放视图需要实现代理方法,指定缩放比例,是为滚动设置缩放比例
         */
     
            //指定缩放比例
            scroll.minimumZoomScale = 0.5;
            scroll.maximumZoomScale = 2.0;
     
           // 设置当前的⽐例
         //    scroll.zoomScale = 1;
            [scroll addSubview:imageView1];
     
          imageView1.userInteractionEnabled = YES; 
     
            UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
            //拍一次
            tap.numberOfTapsRequired = 1;
            //一根手指
           tap.numberOfTouchesRequired = 1;
            [imageView1 addGestureRecognizer:tap];   
            [scrollView addSubview:scroll];
           
            [scroll release];
            [imageView1 release];   
        }
       
        [self.view addSubview:scrollView];
        [scrollView release];
        // Do any additional setup after loading the view.
    }
     
    三、UIScrollView和UIPageControl的结合使⽤
     
    我们可以通过UIPageControl的点击事件和UIScrollView的 偏移量实现⼆者的关联使⽤
    ⾸先给UIPageControl设定点击事件。
     
    [page addTarget:self action:@selector(pageControlAction:)forControlEvents:UIControlEventValueChanged];
     
    // 在pageControl的点击⽅法⾥对ScrollView进⾏关联,通过操作
        scrollView的偏移量ContentOffset进⾏视图上得切换
        - (void)pageControlAction:(UIPageControl *)page
        {
            // 通过tag值先找到要操作的scrollView对象
            UIScrollView *scroll = (UIScrollView *)[self.view viewWithTag:1000];
            // 根据pageControl当前的⻚数乘以屏幕宽度计算当前的偏移量,⽤带动画的⽅法能让切换过程中更加柔和
            [scroll setContentOffset:CGPointMake(page.currentPage * WIDTH, 0) animated:YES];
        }
     
    我们完成了pageControl对scrollView的控制操作,接下来实现scrollView对 pageControl的操作
     
    //先找到scrollView的滚动结束触发的协议⽅法
        - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
            NSLog(@"当停⽌的时候触发");
            // 先通过tag值找到要操作的视图
            UIPageControl *page = (UIPageControl *)[self.view viewWithTag:2000];
            // 根据当前scrollView的偏移量计算出来当前是第⼏张图⽚,让pageControl显⽰对应的⻚数
            page.currentPage = scrollView.contentOffset.x / WIDTH;
        }
     
     
     
  • 相关阅读:
    Memcached:高性能的分布式内存缓存服务器
    MySQL数据库Query的优化
    MySQL数据库的锁定机制及优化
    系统架构及实现对性能的影响(一)
    Mysql数据库的基本结构和存储引擎简介
    Spring事务管理的回滚
    穷举算法实例
    在写完全二叉树的构建及遍历
    Inotify
    Rsync扩展
  • 原文地址:https://www.cnblogs.com/Walking-Jin/p/5210861.html
Copyright © 2020-2023  润新知