二 3.UIScrollView的常用代理(委托)方法
UIScrollView的常用代理(委托)方法
1. 概念
很多时候,我们想在UIScrollView正在滚动 或 滚动到某个位置 或者 停止滚动 时做一些特定的操作要想完成上述功能,前提条件就是能够监听到UIScrollView的整个滚动过程
-
在OC中,发送消息的意思就是调用方法
-
要想成为UIScrollView的delegate,是有条件的,必须实现对应的方法才能监听UIScrollView的滚动过程; 代理考虑的是整个滚动的过程
-
成为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
- 注意:遵守协议放在类扩展中;代理一般都是控制器{一般是,也有不是的};代理的命名以对应的类型名称开始
2.代理方法和解释
3.内容缩放 UIScrollView的缩放原理
UIScrollView不仅能滚动显示大量内容,还能对其内容进行缩放处理
重点:要完成缩放功能的话,只需要将需要 缩放的内容 添加到 UIScrollView中
-
UIScrollView的缩放原理:
当用户在UIScrollView身上使用捏合手势时,UIScrollView会给代理发送一条消息, 询问代理究竟要缩放自己内部的哪一个 子控件(缩放的控件)(哪一块内容)
当用户在UIScrollView身上使用捏合手势时,UIScrollView会调用代理的 viewForZoomingInScrollView:方法,这个方法返回的控件就是需要进行缩放的控件
-
缩放实现步骤
-
设置UIScrollView的id delegate代理对象
-
设置minimumZoomScale :缩小的最小比例
设置maximumZoomScale :放大的最大比例
-
让代理对象实现下面的方法,返回需要缩放的视图控件
-(UIView )viewForZoomingInScrollView:(UIScrollView )scrollView;
-
-
跟缩放相关的其他代理方法
正在缩放的时候调用缩:
-(void)scrollViewWillBeginZooming:(UIScrollView )scrollView withView:(UIView )view
放完毕的时候调用 :
-(void)scrollViewDidZoom:(UIScrollView *)scrollView 代码如下:
View Code#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
4. UIScrollView和控制器
(2)通过storyboard拖线(右击UIScrollView)

代码如下:
浙公网安备 33010602011771号