UIScrollView这个类(也就是滚动视图),可以让我们展示比window尺寸大的内容。用户可以通过手势来实现视图的滚动和缩放。
UIScrollView继承于UIView,是UITableView和UITextView等UIKit类的父类。
基本用法
//创建
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(50, 50, 314, 500)];
//设置背景颜色
scrollView.backgroundColor = [UIColor redColor];
```
#####设置contentSize,这是UIScrollView的内容视图的尺寸,通常contentSize大于UIScrollView的frame
scrollView.contentSize = CGSizeMake(314*3, 500); //非常重要
######设置是否可以滚动
scrollView.scrollEnabled = YES; // 默认为YES
```
设置是否能够整页翻动
scrollView.pagingEnabled = YES; // 默认为NO。如果为YES,滑动会停止在视图边界长度的倍数上。
```
######设置偏移量contentOffset
CGPoint类型,默认为CGPointZero
scrollView.contentOffset = CGPointMake(314, 200);
```
设置是否能点击状态栏滚动到顶部
默认为 YES。点击状态栏时, 如果屏幕上只有一个scrollsToTop属性为YES的scrollView, 而且其代理的shouldScrollViewScrollToTop方法不返回NO, 那么这个scrollView会滚动到顶部
//scrollView.scrollsToTop = NO;
设置是否显示滚动条
//显示水平方向的滚动条(默认YES)
scrollView.showsHorizontalScrollIndicator = NO;
//显示垂直方向的滚动条(默认YES)
scrollView.showsVerticalScrollIndicator = NO;
```
#####设置是否反弹
scrollView.bounces = NO; // 默认为YES。如果该属性为YES,视图滚动时可以越过边界,越过边界后会被弹回。
如果bounces设为NO,以下两个属性不论是不是YES都不会奏效:
//控制滚动视图遇到垂直方向是否反弹
scrollView.alwaysBounceVertical = YES;// 默认为NO
//如果该属性和bounces同时为YES,那么即使contentSize的height小于frame的height,竖直方向的拖拽也是允许的。
//控制滚动视图遇到水平方向是否反弹
scrollView.alwaysBounceHorizontal = YES;//默认为NO
//如果该属性和bounces同时为YES,那么即使contentSize的width小于frame的width,水平方向的拖拽也是允许的。
##缩放功能
//设置最小缩放比例
scrollView.minimumZoomScale = 0.5; //(此处设置的大小最小变为原来的0.5*0.5倍)
//设置最大缩放比例
scrollView.maximumZoomScale = 2; //类型是CGFloat
//zoomScale // default is 1.0
//设置代理(若要实现缩放功能必须实现代理方法)
scrollView.delegate = self;
//缩放的时候是否会反弹
scrollView.bouncesZoom = YES; // default is YES.
//获取缩放状态(只读)
NSLog(@"%d",scrollView.zooming); // zooming: returns YES if user in zoom gesture
//3 添加视图
[self.view addSubview:scrollView];
UIImageView * imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"dani.jpg"]];
//注意UIImageView
imgView.frame = CGRectMake(0, 0, 314, 500);
[scrollView addSubview:imgView]; //addSubview相当于往数组里加元素!
UIView *aView = [[UIView alloc] initWithFrame:CGRectMake(314, 0, 314, 200)];
aView.backgroundColor = [UIColor yellowColor];
[scrollView addSubview:aView];
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"2"]];
#UIPageControl
######滚动视图经常与UIPageControl一起使用。
######UIPageControl继承于UIControl。
先添加两个属性
@property(nonatomic,strong)UIScrollView *scrollView;
@property(nonatomic,retain)UIPageControl *pageControl;
######UIPageControl的使用:
//创建
UIPageControl * pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(50, 600, 314, 34)];
//背景颜色
pageControl.backgroundColor = [UIColor blackColor];
//总页数
pageControl.numberOfPages = 3; //NSInteger类型
//当前第几页(范围是 0 ~ (numberOfPages - 1))
pageControl.currentPage = 0; //NSInteger类型
//只有一页的时候隐藏
pageControl.hidesForSinglePage = YES;//默认为NO
//设置当前页指示器的颜色
pageControl.currentPageIndicatorTintColor = [UIColor redColor];
//设置指示器的颜色
pageControl.pageIndicatorTintColor = [UIColor whiteColor];
//添加点击事件
[pageControl addTarget:self action:@selector(pageClick:) forControlEvents:UIControlEventValueChanged];
//设为属性
self.scrollView = scrollView;
self.pageControl = pageControl;
//3 添加到视图
[self.view addSubview:pageControl];
##UIPageControl点击事件
点击UIPageControl后,滚动视图显示相应页面
-(void)pageClick:(UIPageControl *)sender{
//1 获取当前显示第几页
NSInteger currentPage = sender.currentPage;
//2 设置scrollView的偏移量
self.scrollView.contentOffset = CGPointMake(314 * currentPage, 0);
}
#UIScrollViewDelegate
######如果想实现缩放,就必须实现viewForZoomingInScrollView这个代理方法,返回要进行缩放的视图。如果返回nil,则什么都不会被触发。例:
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
return scrollView.subviews[0];
}
###以下的四个代理方法在拖拽过程中会依次被触发:
######即将开始拖拽
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
}
######停止拖拽时触发
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
}
######即将进行减速
-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
}```
减速结束
减速结束时,我们可以通过contentOffset判断当前在那一页,进而改变pageControl的currentPage属性。
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
//获取偏移量
NSInteger currentPage = scrollView.contentOffset.x/314;
//改变pageControl的显示
self.pageControl.currentPage = currentPage;
}