UI基础--UIScrollView和UIScrollViewDelegate

UIScrollView

在iOS的控件中,普通的UIView不具备滚动功能,不能显⽰示过多的内容,因此,就有了一个能够滚动的视图控件,可以用来展⽰大量的内容,并且可以通过滚动查看所有的内容,并且能实现图片缩放功能的一个控件,这个就是UIScrollView。

 

 

UIScrollView常用属性

 1 //滚动位置
 2 @property(nonatomic) CGPoint contentOffset; 
 3 //可视范围、滚动范围(或者说是scrollView的大小)
 4 @property(nonatomic) CGSize contentSize; 
 5 //上下左右,逆时针顺序,增加滚动边距。默认不显示这个距离,滚动之后才有。
 6 @property(nonatomic) UIEdgeInsets contentInset;
 7 //是否启用弹簧效果。默认启用
 8 @property(nonatomic) BOOL bounces; 
 9 //启用滚动
10  @property(nonatomic,getter=isScrollEnabled) BOOL scrollEnabled;
11 //横向滚动条
12 @property(nonatomic) BOOL showsHorizontalScrollIndicator
13 //纵向滚动条
14 @property(nonatomic) BOOL showsVerticalScrollIndicator;

注意点:

如果UIScrollView⽆无法滚动,可能是以下原因:

1、没有设置contentSize;

2、scrollEnabled = NO;

3、没有接收到触摸事件:userInteractionEnabled = NO;

4、没有取消autolayout功能(要想scrollView滚动,必须取消autolayout)。

5、不允许直接修改某个对象内部结构体(如contentoffset)属性的成员,必须遵循三个步骤(先拿到值,修改,再把修改后的值赋回去)。

 

实现缩放功能:将需要缩放的内容添加到UIScrollView中即可,但是必须遵守UIScrollView代理协议,并且要先设置了代理,再使用代理方法才会生效。

实现的原理:当用户在UIScrollView身上使用捏合手势时,UIScrollView会给代理发送一条消息,调用-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView方法,返回要缩放的控件(该控件必须为UIScrollView内的子控件)。

实现缩放功能的4个步骤

1、遵守scrollview的代理协议(一般为控制器)

2、为scrollview设置代理(self)

3、调用代理方法(-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView方法),返回需要实现缩放功能的子控件

4、设置缩放的范围(最大和最小比例)

1 //缩放属性
2 @property(nonatomic) CGFloat minimumZoomScale;//最小缩放倍数,默认为1.0
3 @property(nonatomic) CGFloat maximumZoomScale; //最大缩放倍数,默认为1.0(只有max大于min才会有缩放效果)

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

缩放完毕的时候调用 

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

正在缩放的时候调用

- (void)scrollViewDidZoom:(UIScrollView *)scrollView

 

 

UIScrollViewDelegate

delegate:代理(代理的名字都以类的名字开始,代理的方法也是 以对象的名字开始,大部分方法名都是这样)

代理的作用:

1)、传值,经常用在b类要把自己的一个数据或者对象传给a类,让a类去展示或者处理。(切分紧耦合,和代码分块的时候经常用)

2)、传事件,所谓传事件就是a类发生了什么事,把这件事告诉关注委托的对象,由委托的对象去考虑发生这个事件后应该做出什么反映。

UIScrollViewDelegate中的一些方法:

 1 - (void)scrollViewDidScroll:(UIScrollView *)scrollView;//滚动事件方法,滚动过程中会一直循环执行(滚动中…)
 2 
 3 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;//开始拖拽事件方法
 4 
 5 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;//拖拽操作完成事件方法
 6 
 7 - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;//即将停止滚动事件方法
 8 
 9 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;//滚动停顿完成事件方法,滚动过程中减速停止后执行
10 
11 - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view //开始缩放事件方法
12 
13 - (void)scrollViewDidZoom:(UIScrollView *)scrollView//缩放操作完成事件方法
14 
15 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView; //返回缩放视图,注意只有实现这个代理方法才能进行缩放,此方法返回需要缩放的视图


 

原文地址:https://www.cnblogs.com/xiaomoge/p/4196905.html