二 3.UIScrollView的常用代理(委托)方法

UIScrollView的常用代理(委托)方法

1. 概念

很多时候,我们想在UIScrollView正在滚动 或 滚动到某个位置 或者 停止滚动 时做一些特定的操作要想完成上述功能,前提条件就是能够监听到UIScrollView的整个滚动过程 
  1. 在OC中,发送消息的意思就是调用方法

  2. 要想成为UIScrollView的delegate,是有条件的,必须实现对应的方法才能监听UIScrollView的滚动过程; 代理考虑的是整个滚动的过程

  3. 成为delegate的条件

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

    如图: 代码如下:

    @interface ViewController () <UIScrollViewDelegate>
    @property (weak, nonatomic) IBOutlet UIScrollView *scrollview;
    /** dog */
    @property (nonatomic, strong) XMGDog *dog;
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        // 设置代理
        self.dog = [[XMGDog alloc] init];
        self.scrollview.delegate = self.dog;
        // 监听控件的行为:有的控件用的是代理有的用的是target,有的两者都有,优先试一下target
        UITextField *textField = [[UITextField alloc] init];
        textField.delegate = self.dog;
    //  [textField addTarget:self action:@selector(textChange:) forControlEvents:UIControlEventEditingChanged]; 
        [self.view addSubview:textField];
    }
    @end
    @interface XMGDog : NSObject <UIScrollViewDelegate>
    @end
    @interface XMGDog() 
    @end
    @implementation XMGDog
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView
    {
        NSLog(@"%@监听到了scrollView的滚动", self);
    }
    @end
  4. 注意:遵守协议放在类扩展中;代理一般都是控制器{一般是,也有不是的};代理的命名以对应的类型名称开始

2.代理方法和解释

3.内容缩放 UIScrollView的缩放原理

UIScrollView不仅能滚动显示大量内容,还能对其内容进行缩放处理

重点:要完成缩放功能的话,只需要将需要 缩放的内容 添加到 UIScrollView中
  1. UIScrollView的缩放原理:

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

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

  2. 缩放实现步骤

    • 设置UIScrollView的id delegate代理对象

    • 设置minimumZoomScale :缩小的最小比例

      设置maximumZoomScale :放大的最大比例

    • 让代理对象实现下面的方法,返回需要缩放的视图控件

      -(UIView )viewForZoomingInScrollView:(UIScrollView )scrollView;

  3. 跟缩放相关的其他代理方法

    正在缩放的时候调用缩:

    -(void)scrollViewWillBeginZooming:(UIScrollView )scrollView withView:(UIView )view

    放完毕的时候调用 :

    -(void)scrollViewDidZoom:(UIScrollView *)scrollView 代码如下:

    #import "ViewController.h"
    
    @interface ViewController () <UIScrollViewDelegate>
    @property (weak, nonatomic) IBOutlet UIScrollView *scrollview;
    @property (weak, nonatomic) UIImageView *imageView;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
            
        UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"minion"]];
        [self.scrollview addSubview:imageView];
        self.imageView = imageView;
        
        self.scrollview.backgroundColor = [UIColor redColor];
        self.scrollview.contentSize = imageView.image.size;
        
        // 设置代理
        self.scrollview.delegate = self;
        // 设置缩放比例
        self.scrollview.maximumZoomScale = 2.0;
        self.scrollview.minimumZoomScale = 0.2;
    }
    
    #pragma mark - <UIScrollViewDelegate>
    /**
     这个方法的返回值决定了要缩放的内容(返回值只能是UIScrollView的子控件)
     */
    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
    {
        return self.imageView;
    }
    @end
    View Code

4. UIScrollView和控制器

1. 一般情况下,就设置UIScrollView所在的控制器 为 UIScrollView的delegate
 
2. 设置控制器为UIScrollView的delegate有2种方法:
   (1)通过代码(self就是控制器) self.scrollView.delegate = self;

   (2)通过storyboard拖线(右击UIScrollView)

 

posted @ 2016-09-15 15:41  <瑾瑜>  阅读(131)  评论(0)    收藏  举报