UIScrollView
什么是UIScrollView
- 移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也是相当有限
- 当展示的内容较多,超出一个屏幕时,用户可通过滚动手势来查看屏幕以外的内容
- 普通的UIView不具备滚动功能,不能显示过多的内容
- UIScrollView是一个能够滚动的视图控件,可以用来展示大量的内容,并且可以通过滚动查看所有的内容
UIScrollView的基本使用
UIScrollView的用法很简单:将需要展示的内容添加到UIScrollView中,并且设置UIScrollView的contentSize属性,告诉UIScrollView所有的内容的尺寸,也就是告诉它滚动的范围
UIScrollView的代理(delegate)
- 很多时候,我们想在UIScrollView正在滚动或滚动到某个位置或者停止滚动时做一些特定的操作
- 要想完成上述功能,前提条件就是能够监听到UIScrollView的整个滚动过程
- 当UIScrollView发生一系列的滚动操作时,会自动通知它的代理(delegate)对象,给它的代理发送相应的消息,让代理得知它的滚动情况
- 也就是说,要想监听UIScrollView的滚动过程,就必须先给UIScrollView设置一个代理对象,然后通过代理得知UIScrollView的滚动过程
UIScrollView和delegate的通信
- 用户开始拖拽时,发送特定消息(调用:scrollViewWillBeginDragging:方法)
- 具体滚动到某个位置时,发送特定消息(调用:scrollViewDidScroll:方法)
- 用户停止拖拽时,发送特定消息(调用:scrollViewDidEndDragging:willDecelerate:方法)
所以,想要成为UIScrollView的delegate,是有条件的,必须实现对应的方法,才能监听UIScrollView的滚动过程。
UIScrollView将delegate需要实现的方法都定义在了UIScrollViewDelegate协议中,因此想要成为UIScrollView的delegate,必须遵守UIScrollViewDelegate协议,然后实现协议中的相应的方法,就可以监听UIScrollView的滚动过程了
后记:两个对象要想实现通信,需要另一个对象遵守协议(即成为代理),实现协议的方法给对象调用。
代理使用的步骤:
1、代理遵守协议
2、代理实现方法
3、设置为某个对象的代理(一般使用控制器作为代理监听)(例如:self.scrollView.delegate=self;)
UIScrollView的常见属性
@property (nonatomic) CGPoint contentOffset;
这个属性表示UIScrollView当前滚动的位置
@property (nonatomic) CGSize contentSize;
这个属性用来表示UIScrollView内容的尺寸,滚动范围
@property (nonatomic) UIEdgeInsets contentInset;
这个属性能够在UIScrollView的四周增加额外的滚动区域
UIScrollView的其他属性
@property (nonatomic) BOOL bounces;
设置UIScrollView是否需要弹簧效果
@property (nonatomic,getter=isScrollEnable) BOOL scrollEnabled;
设置UIScrollView是否能滚动
@property (nonatomic) BOOL showsHorizontalScrollIndicator;
是否显示水平滚动条
@property (nonatomic) BOOL showsVerticalScrollIndicator;
是否显示垂直滚动条
UIScrollView可以实现缩放功能
当用户在UIScrollView中使用捏合手势时,UIScrollView会给代理发送一条消息,询问代理究竟要缩放自己内部的哪一个子控件
即调用代理的-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;方法
这个方法返回的就是要缩放的那个控件
要想完成缩放,还要设置最大最小缩放比例
缩放实现步骤:
- 1.设置UIScrollView的Id<UIScrollViewDelegate>delegate代理对象
- 2.设置minimumZoomScale:缩小的最小比例
- 3.设置maxmumZoomScale:放大的最大比例
- 4.让代理对象实现下面方法,返回需要缩放的视图控件
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;
分页
只要将UIScrollView的pageEnable属性设置为YES,UIScrollView会被分割成多个独立页面,里面的内容就能进行分页展示
一般会配合UIPageControl增强分页效果,UIPageControl常用属性如下:
- 一共有多少页
- @property (nonatomic)NSInteger numberOfPages;
- 当前显示的页码
- @property(nonatomic)NSInteger currentPage;
- 只有一页时,是否需要隐藏页码指示器
- @property(nonatomic)BOOL hidesForSinglePage;
- 其他页码指示器颜色
- @property (nonatomic,retain)UIColor *pageIndicatorTintColor;
- 当前页码指示器颜色
- @property (nonatomic,retain)UIColor *currentPageIndicatorTintColor;
NSTimer
NSTimer叫做“定时器”,它的作用如下:
- 在指定的时间执行执行的任务
- 每隔一段时间执行指定的任务
使用定时器
定时器一旦被停止就相当于废弃掉了,如果再需要使用,需要重新创建一个定时器
在ios中处理ui和触摸事件的线程一般为主线程,如果在使用定时器的时候,发生了触摸事件,那么线程会去响应触摸事件,所以我们如果想要即处理触摸事件,又处理定时器时,就需要设置定时器的优先级
使用-(void)invalidate方法可以停止定时器