初识UIScrollView
什么是UIScrollView?
- 移动设备的屏幕大小是极其有限的,当展示的内容较多的时候,超出一个屏幕时,用户可以通过滚动手势来查看屏幕以外的内容
- UIScrollview是一个能够滚动的视图控件,可以用来展示大量的内容.
UIScrollView的基本使用
- 将需要展示的内容添加到UIScrollview中
- 设置UIScrollview的contentSize属性,告诉UIScrollview所内容的尺寸----就是滚动的范围
- UIScrollview显示内容的小细节
- 超出UIScrollview边框的内容会被自动隐藏
- 用户可以用手势拖动来查看超出边框并被隐藏的内容
UIScrollView无法滚动的原因
- 没有设置contentSize
- scroEnabled = NO;
- 没有接收到触摸事件:userInteractionEnabled = NO;
UIScrollView的属性
关于显示内容的
表示UIScrollView滚动的位置
(就是内容左上角与scrollView左上角的间距!!)
@property (nonatomic) CGPoint contentOffset;
表示UIScrollView内容的尺寸,滚动范围(能滚多远)
@property (nonatomic) CGSize contentSize;
在UIScrollView的四周增加额外的滚动区域,一般用来避免scrollView的内容被其他控件挡住
@property (nonatomic) UIEdgeInsets contentInset;
其他属性,效果or滚动条
设置UIScrollView是否需要弹簧效果
@property (nonatomic) BOOL bounces;
设置UIScrollView是否能滚动
@property (nonatomic,getter=isScrollEnabled) BOOL scrollEnabled;
是否显示水平滚动条
@property (nonatomic) BOOL showsHorizontalScrollIndicator;
是否显示垂直滚动条
@property (nonatomic) BOOL showsVerticalScrollIndicator;
UIScrollView的代理
在很多时候我们需要知道UIScrollView滚动到了那里,它是否停止,那些时候来做一些特定的操作,要想完成那些特定的动作进行时的功能,前提就是能够监听到UIScrollView整个滚动的过程
要想监听整个UIScrollView的滚动过程,就必须给它设置一个代理对象,通过代理得知UIScrollView的滚动过程
UIScrollView和delegate的通信
- UIScrollView和delegate的通信应该如下表:
手势 | 方法 |
---|---|
开始拖拽 | scrollViewWillBeginDragging: |
具体到某个位置 | scrollViewDidScroll: |
用户停止拖拽 | scrollViewDidEndDragging:willDecelerate: |
UIScrollView需要实现的方法都定义在UIScrollViewDelegate协议中,遵守协议后,实现协议中的方法就可以监听UIScrollView的滚动过程
UIscrollView和控制器
- 一般情况下,就设置UIScrollView所在的控制器为UIScrollView的delegate
- 设置代理的方法有两种:
- 通过代码来设置----
self.scrollView.delegate = self;
- 通过storyboard拖线
- 通过代码来设置----
UIscrollView中内容的缩放
- 原理:当用户在UIScrollView身上使用捏合手势时,UIScrollView会给代理发送一条消息,询问代理究竟要缩放自己内部哪一块
- UIScrollView身上使用捏合手势时,调用
viewForZoomingInScrollView:
这个方法返回的控件就是需要进行缩放的控件
缩放实现步骤
- 设置UIScrollView的
id<UIScrollViewDelegate>delegate
代理对象 - 设置
minimumZoomScale:
缩小的最小的比例 - 设置
maximumZoomScale:
放大的最大的比例 - 让代理对象实现下面的方法,返回需要缩放的视图控件
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;
跟缩放相关的其他代理方法
即将开始缩放的时候调用
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view;
正在缩放的时候调用
- (void)scrollViewDidZoom:(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叫做定时器
- 在制定的时间执行任务
- 每隔一段时间执行指定的任务
调用下面的方法就会开启一个定时的任务
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeINterval)ti target:(id)aTarget selector:(SEL)aselector userInfo:(id)userInfo repeats :(BOOL)yes or no;
每隔ti秒,调用一次aTarget的aSelector方法,yesOrno决定了是否重复执行任务
- 解决定时器在主线程不工作的的问题
NSTimer *timer = [NSTimer timerWithTimeInterval:2 target:self selector:@selector(next) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];