移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也相当有限
UIScrollView是一个能够滚动的视图控件,可以用来展示大量的内容,并且可以通过滚动查看所有的内容
如:
手机的设置页面、照片浏览中放大缩小页面、app上的广告栏等
基本使用过程:
1)创建UIScrollView对象并设置其frame
2)将要展示的内容添加到UIScrollView中
3)设置UIScrollView的contentSize属性以确定可展示的视图范围
(能滚多远,滚到哪里是尽头)
无法滚动的解决办法:
没有设置contentSize
scrollEnabled = NO
没有接收到触摸事件:userInteractionEnabled = NO
没有取消autolayout功能(要想scrollView滚动,必须取消autolayout)
… …
UIScrollView的几个重要属性
frame:我们所看到的frame,以父视图左上定点作为坐标原点
contentSize:scrollView内部的可展示的范围,是一个CGSize类型
@property(nonatomic) CGSize contentSize - (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated
contentOffSet:当前的滚动位置,是一个CGPoint类型
@property(nonatomic) CGPoint contentOffset
contentInset:内边距
@property(nonatomic) UIEdgeInsets contentInset
其他属性:
@property(nonatomic, getter=isScrollEnabled) BOOL scrollEnabled //滚动功能使能 @property(nonatomic) BOOL scrollsToTop //点击状态栏回滚到顶部功能的使能 @property(nonatomic) BOOL bounces //弹簧功能使能 @property(nonatomic) BOOL showsHorizontalScrollIndicator //水平滚动条显示使能 @property(nonatomic) BOOL showsVerticalScrollIndicator //垂直滚动条显示使能
滚动视图的代理
UIScrollView对象有一个代理属性:
@property(nonatomic, assign) id< UIScrollViewDelegate > delegate
代理者需要遵循代理协议
检测滚动位置的代理方法:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView - (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView
检测拖拽的代理方法:
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
如何实现缩放?
由于scrollView中可以放置多个子视图
故当使用缩放手势时,scrollView通过代理方法询问代理者应当缩放哪个子视图
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
实现该方法,返回要缩放的子视图
检测缩放的代理方法:
- (void)scrollViewDidZoom:(UIScrollView *)scrollView - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView*)view - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView*)view atScale:(CGFloat)scale
滚动视图的分页功能
滚动视图支持分页效果的滚动功能
相关属性:
@property(nonatomic, getter=isPagingEnabled) BOOL pagingEnabled //分页效果使能
使用的一般步骤:
1)设置页数,contentSize的width为frame的width的页数倍
2)向scrollView中放置每一页应显示的内容
3)分页效果属性设置为YES
4)必要时隐藏滚动条
5)必要时使用UIPageControl来显示当前是第几页