• 代理设计模式在 UIScrollView 中的应用


    代理设计模式在 UIScrollView 中的应用

    成为delegate的条件:

     >UIScrollView将delegate需要实现的方法都定义在了UIScrollViewDelegate协议中,因此要想成为UIScrollView的delegate,必须遵守UIScrollViewDelegate协议,然后实现协议中相应的方法,就可以监听UIScrollView的滚动过程了

    /**

     *  监听控件的事件的三种方法:
     *  1> 通过addTarget:的方式来监听事件(前提是这个控件是继承自UIControl)
     *  2> 通过代理的方式来监听事件    
     *  3> 通知 

     */

    ------ 通过代理来监听UIScrollView对象的事件的机制 ---------

    1. 设置UIScrollView的delegate属性(也就是为UIScrollView找一个代理对象) 

    2.  让代理对象遵守UIScrollViewDelegate这个协议。当代理对象遵守完毕这个协议以后, 就可以保证代理对象中具有了对应的方法。

    3. 当UIScrollView的某个事件被触发的时候, UIScrollView会自动去找代理对象(delegate)的某个方法, 并调用这个方法。(这样就实现了事件的机制)

    4. 我们要做的就是在代理对象的相应方法中, 编写我们的代码。然后当UIScrollView的某个事件被触发的时候,就会自动执行这里的代码了。

    设置控制器为UIScrollView的代理有2种方法:
     方法一: 通过代码(self就是控制器)
        self.scrollView.delegate = self;
     方法二: 通过storyboard拖线(右击UIScrollView

    这里只用代码演示:

     1 /**
     2      *  设置代理的基本步骤:
     3      *  1. 为scroll view 设置delegate属性(设置代理对象)
     4      *  2. 让代理对象遵守代理协议
     5      *  3. 让代理对象, 实现协议中的方法
     6      */
     7 //先要让控制器遵守代理协议:   —>代码设置方式
     8 @interface ViewController ()<UIAlertViewDelegate>
     9 - (void)viewDidLoad {
    10     [super viewDidLoad];
    11     // 设置ScrollView的contentSize
    12     // 设置scrollView的contentSize为图片框的大小
    13     self.scrollView.contentSize = self.imgView.bounds.size;
    14  // 通过代理来监听scroll view的滚动事件
    15     // 1> 为UIScrollView设置代理
    16     // 让控制器作为UIScrollView的代理
    17     self.scrollView.delegate = self;
    18   //设置缩放比:最大能放大多少倍,最小能缩小多少倍,
    19     self.scrollView.maximumZoomScale = 4.5;
    20     self.scrollView.minimumZoomScale = 0.1;
    21 }
    22 
    23 // 实现代理协议中的方法(滚动方法)
    24 // 当scroll view滚动的时候就会调用这个方法
    25 - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    26     // NSLog(@"....");
    27    
    28     // 输出当前滚动的位置
    29     NSLog(@"%@", NSStringFromCGPoint(scrollView.contentOffset));
    30 }
    31 
    32 // 开始拖拽
    33 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    34     NSLog(@"开始拖拽....");
    35 }
    36 
    37 // 停止拖拽
    38 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
    39     NSLog(@"停止拖拽....");
    40 }
    41  
     

  • 相关阅读:
    一文搞懂 ThreadLocal 原理
    听说用 Lombok 可以早点下班?
    原来 CPU 为程序性能优化做了这么多
    如何优雅地中止线程?
    线程数,射多少更舒适?
    Elasticsearch 之聚合分析入门
    Go语言之旅:基本类型
    Go语言之旅:包
    网络七层协议之数据链路层
    网络七层协议之物理层
  • 原文地址:https://www.cnblogs.com/anRanTimes/p/5094042.html
Copyright © 2020-2023  润新知