zoukankan      html  css  js  c++  java
  • (3) IOS笔记本——UIScrollView的其他应用

    ◇先来介绍一下UIScrollView的代理:

    1.很多时候,我们想在UIscrollView正在滚动或者滚动到某个位置或者停止滚动时做一些特定的操作。

    2.想要完成上述的功能,前提条件是能够监听到UIscrollView的整个滚动过程。

    3.当UIScrollView发生一系列的滚动操作时,会自动通知它的代理(delegate)对象,给它的代理发送相应的消息,让代理得知它的滚动情况。

    4.UIScrollView和delegate的通信如下图所示

             

    5.若想成为UIScrollView的代理,则必须遵守UIScrollView的协议。简而言之,成为delegate的条件:UIScrollView将delegate需要实现的方法都定义在UIScrollViewDelegate协议中,因此想成为UIScrollView的delegate,就必须遵守UIScrollViewDelegate协议,然后实现协议中对应的方法,就可以监听UIScrollView的滚动过程了。

    6.UIScrollView和控制器

    (1)一般情况下,把UIScrollView所在的控制器设置成UIScrollView的delegate。

    (2)设置控制器为UIScrollView的delegate有2种方法:一是通过代码的方式(self就是控制器)self.scrollView.delegate = self.

    二是通过storyboard的拖线。

    7.代理的用途:

    (1)监听的思想:让一个对象A监听另一个对象B的状态。(则A为B的代理)

    (2)通知的思想:一个对象B状态发生了改变(做了某些事情),想通知另一个对象A

    8.UIScrollView的缩放原理

    (1)当用户在UIScrollView上使用了捏合手势时,UIScrollView会给代理发送一条消息,询问代理自己要缩放内部的哪一个子控件。

    (2)当用户在UIScrollView上使用捏合手势时,UIScrollView会调用代理的viewForZoomingInScrollView:方法,这个方法返回的控件就是需要进行缩放的控件。

    ◇代理有很多作用, 其中一种作用就是控制UIScrollView的缩放的,一般步骤就是三种:

      ◇1、准守协议

    @interface ViewController () <UIScrollViewDelegate> 

      2、实现协议

     1 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
     2 {
     3     NSLog(@"开始拖拽了~~!~!~!");
     4 }
     5 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
     6 {
     7     NSLog(@"开始缩放~!~!~!~~~~~~~~~~~~");
     8     return self.UIImageView;
     9 }
    10 - (void)scrollViewDidZoom:(UIScrollView *)scrollView
    11 {
    12     NSLog(@"正在缩放~!~!~!~!~!~!~!~!~!~!");
    13 }

      3、设置代理

     1 - (void)viewDidLoad {
     2     [super viewDidLoad];
     3     self.UIScrollView.contentSize = self.UIImageView.image.size;
     4     self.UIScrollView.contentInset = UIEdgeInsetsMake(20, 20, 20, 20);
     5     //设置代理为控制器本身
     6     self.UIScrollView.delegate = self;
     7     //设置缩放大小比例
     8     self.UIScrollView.maximumZoomScale = 2.0;
     9     self.UIScrollView.minimumZoomScale = 0.2;
    10 }

     ◇第二个应用----图片轮播

      ◇图片轮播我们一点儿都不陌生,来看看效果图,(注意图中的下面几个小点):

                                           

      ◇该应用用到的几个技术:

        ◇1、添加图片(利用for循环在UIScrollView中添加图片)

        ◇2、设置分页

        ◇3、利用定时器,定时播放下一张图片

      ◇基于上面几个步骤,来看看具体的实现:

        ◇1、添加图片

     1     //添加图片
     2     for (int i = 0; i <= XWXImageCount ; i++) {        
     5         NSString *name = [NSString stringWithFormat:@"img_0%d",i + 1];
     6         UIImageView *image = [[UIImageView alloc] init];
     7         image.image = [UIImage imageNamed:name];
     8         
     9         image.frame = CGRectMake(i * imageW, imageY, imageW, imageH);
    10          
    11         [self.scrollView addSubview:image];
    12     }

        ◇2、设置分页

    1     //允许分页,设置分页点数
    2     self.scrollView.pagingEnabled = YES;
    3     self.pageControl.numberOfPages = XWXImageCount;

        ◇3、设置定时器

     1 //启动定时器
     2 - (void)addTimer{
     3     self.timer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(nextImg) userInfo:nil repeats:YES];
     4     [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
     5 }
     6 
     7 //下一张图片
     8 - (void)nextImg{
     9     // 1.增加pageControl的页码
    10     int page = self.pageControl.currentPage;
    11     if (page == XWXImageCount - 1) {
    12         page = 0;
    13     } else {
    14         page = self.pageControl.currentPage + 1;
    15     }
    16     
    17     // 2.计算scrollView滚动的位置
    18     CGFloat offsetX = page * self.scrollView.frame.size.width;
    19     CGPoint offset = CGPointMake(offsetX, 0);
    20     [self.scrollView setContentOffset:offset animated:YES];
    21     
    22     [self.scrollView setContentOffset:offset animated:YES];
    23 }
    24 //停止定时器
    25 - (void)removeTimer
    26 {
    27     [self.timer invalidate];
    28     self.timer = nil;
    29 }

        ◇另外一个要注意的,在拖拽图片的时候,需要停止定时器,在定制拖拽图片的时候,要重新启动定时器,我们可以利用UIScollView的协议来实现。

     1 -(void)scrollViewDidScroll:(UIScrollView *)scrollView{
     2    
     3     int page =  scrollView.contentOffset.x / scrollView.frame.size.width;
     4     self.pageControl.currentPage = page;
     5 }
     6 
     7 -(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
     8     [self removeTimer];
     9 }
    10 
    11 -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    12     [self addTimer];
    13 }

        

  • 相关阅读:
    [转] Immutable 常用API简介
    [转] 组件库按需加载 借助babel-plugin-import实现
    [转] react-router4 + webpack Code Splitting
    [转] React Hot Loader 3 beta 升级指南
    [转] 如何写好.babelrc?Babel的presets和plugins配置解析
    [转] webpack热更新配置小结
    [转] 学会fetch的用法
    [转] webpack3.0踩坑:postcss-loader的使用
    [转] 详解webpack-dev-server的使用
    webpack 使用环境变量
  • 原文地址:https://www.cnblogs.com/kaolalovemiaomiao/p/5245942.html
Copyright © 2011-2022 走看看