代理设计模式在 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  
 

原文地址:https://www.cnblogs.com/anRanTimes/p/5094042.html