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

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

成为delegate的条件:

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

* 通过代理来监听事件
*
设置代理可以通过"拖线"的方式或者是代码的方式

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

 */


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

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

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

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

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

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

这里只用代码演示:

 /**
     *  设置代理的基本步骤:
     *  1. 为scroll view 设置delegate属性(设置代理对象)
     *  2. 让代理对象遵守代理协议
     *  3. 让代理对象, 实现协议中的方法
     */
//先要让控制器遵守代理协议:   —>代码设置方式
@interface ViewController ()<UIAlertViewDelegate>
- (void)viewDidLoad {
    [super viewDidLoad];
    // 设置ScrollView的contentSize
    // 设置scrollView的contentSize为图片框的大小
    self.scrollView.contentSize = self.imgView.bounds.size;
 // 通过代理来监听scroll view的滚动事件
    // 1> 为UIScrollView设置代理
    // 让控制器作为UIScrollView的代理
    self.scrollView.delegate = self;
  //设置缩放比:最大能放大多少倍,最小能缩小多少倍,
    self.scrollView.maximumZoomScale = 4.5;
    self.scrollView.minimumZoomScale = 0.1;
}

// 实现代理协议中的方法(滚动方法)
// 当scroll view滚动的时候就会调用这个方法
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    // NSLog(@"....");
   
    // 输出当前滚动的位置
    NSLog(@"%@", NSStringFromCGPoint(scrollView.contentOffset));
}

// 开始拖拽
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    NSLog(@"开始拖拽....");
}

// 停止拖拽
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
    NSLog(@"停止拖拽....");
}






你可能感兴趣的:(代理设计模式在 UIScrollView 中的应用)