首页 > 代码库 > UI基础--UIScrollView和UIScrollViewDelegate

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

 



 

UI基础--UIScrollView和UIScrollViewDelegate