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