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; //返回缩放视图,注意只有实现这个代理方法才能进行缩放,此方法返回需要缩放的视图