一、背景
1.移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也相当有限
2.当展示的内容较多,超出一个屏幕时,用户可通过滚动手势来查看屏幕以外的内容
3.普通的UIView不具备滚动功能,不适合显示过多的内容
二、作用
UIScrollView是一个能够滚动的视图控件,可以用来展示大量的内容,并且可以通过滚动查看所有的内容
三、使用方法
1.创建UIScrollView对象
2.添加要显示的内容
3.设置contentSize,即设置显示内容的大小
4.注意:无法滚动的原因
(1).没有设置显示内容的大小,没有设置contentSize
(2).视图被禁用了,scrollEnabled设为了NO
(3).没有接收到触摸事件,userInteractionEnabled设为了NO
四、属性
1.常见属性
//这个属性用来表示UIScrollView滚动的位置;其实就是内容左上角与scrollView左上角的间距值
//显示的内容在视图的左边或则上面值为正数,显示的内容在视图的右边或则下面值为负数
@property(nonatomic) CGPoint contentOffset;
//这个属性用来表示UIScrollView内容的尺寸,即所能滚动的范围
@property(nonatomic) CGSize contentSize;
//这个属性能够在UIScrollView的4周增加额外的滚动区域,一般用来避免scrollView的内容被其他控件挡住
@property(nonatomic) UIEdgeInsets contentInset;
2.frame、contentOffset、contentSize、contentInset的关系图
注意:
a.最小的方框代表UIscrollView对象
b.中等的方框代表要显示的内容
c.最大的方框和中等方框之间的间距代表给内容增加的额外区域
3.其他属性
@property(nonatomic,assign) id<UIScrollViewDelegate> delegate; //设置代理
@property(nonatomic,getter=isDirectionalLockEnabled) BOOL directionalLockEnabled; //指定控件是否只能在一个方向上滚动
@property(nonatomic) BOOL bounces; //是否有反弹效果
@property(nonatomic) BOOL alwaysBounceVertical; //控制垂直方向遇到边框是否反弹
@property(nonatomic) BOOL alwaysBounceHorizontal; //控制水平方向遇到边框是否反弹
@property(nonatomic,getter=isPagingEnabled) BOOL pagingEnabled; //是否分页
@property(nonatomic,getter=isScrollEnabled) BOOL scrollEnabled; //是否能滚动
@property(nonatomic) BOOL showsHorizontalScrollIndicator; //是否显示水平方向的滚动条
@property(nonatomic) BOOL showsVerticalScrollIndicator; //是否显示垂直方向的滚动条
@property(nonatomic) UIEdgeInsets scrollIndicatorInsets; //指定滚动条在scrollerView中的位置
@property(nonatomic) UIScrollViewIndicatorStyle indicatorStyle; //设置滚动条的样式
@property(nonatomic) CGFloat decelerationRate NS_AVAILABLE_IOS(3_0); //改变scrollerView的减速点位置
@property(nonatomic,readonly,getter=isTracking) BOOL tracking; //是否正在被跟踪
@property(nonatomic,readonly,getter=isDragging) BOOL dragging; //是否正在被拖拽
@property(nonatomic,readonly,getter=isDecelerating) BOOL decelerating; //是否正在减速
@property(nonatomic) BOOL delaysContentTouches; //是否延时调用开始滚动的方法
@property(nonatomic) BOOL canCancelContentTouches; //否接触取消touch的事件
@property(nonatomic) BOOL bouncesZoom; //缩放的时候是否会反弹
@property(nonatomic,readonly,getter=isZooming) BOOL zooming; //是否正在缩放
@property(nonatomic,readonly,getter=isZoomBouncing) BOOL zoomBouncing; //是否正在进行缩放反弹
@property(nonatomic) BOOL scrollsToTop; //是否能滚动到顶部
五、ScrollView的代理
1.成为代理的方法
(1).遵守代理协议
(2).实现代理方法
2.内容缩放
(1).UIScrollView不仅能滚动显示大量内容,还能对其内容进行缩放处理,只要是控件就可以缩放
(2).缩放步骤
(a).设置UIScrollView的id delegate代理对象
(b).设置minimumZoomScale :缩小的最小比例
(c).设置maximumZoomScale :放大的最大比例
(d).让代理对象实现下面的方法,返回需要缩放的视图控件
- (UIView )viewForZoomingInScrollView:(UIScrollView )scrollView;
3.UIScrollView的代理
#import "ViewController.h"
@interface ViewController () <UIScrollViewDelegate>
@property (nonatomic,strong) UIScrollView *scrollView;
@property (nonatomic,strong) UIImageView *imageView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//创建一个滚动视图
self.scrollView = [[UIScrollView alloc] init];
[self.view addSubview:self.scrollView];
self.scrollView.frame = CGRectMake(40, 100, 285, 250);
self.scrollView.backgroundColor = [UIColor orangeColor];
//向ScrollView中添加一个ImageView
self.imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed: @"minion"]];
[self.scrollView addSubview:self.imageView];
//设置scrollView的显示内容大小
self.scrollView.contentSize = self.imageView.image.size;
//设置控制器为代理
self.scrollView.delegate =self;
//设置缩放比例
self.scrollView.maximumZoomScale = 2.5;
self.scrollView.minimumZoomScale = 0.5;
}
#pragma mark - <UIScrollViewDelegate>接口实现
//实时监控滑动
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
NSLog(@"正在滑动");
}
//监听开始滑动
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
NSLog(@"开始滑动");
}
//监听结束滑动
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
NSLog(@"结束滑动");
}
//监听:离开屏幕的时候,开始减速
-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
NSLog(@"------开始减速");
}
//监听:有惯性的减速停止
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
NSLog(@"------减速停止");
}
#pragma mark 控件的缩放
//这个方法的返回值决定了要缩放的内容(返回值只能是UIScrollView的子控件或间接子控件)
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
return self.imageView;
}
//正在缩放的时候调用
- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
NSLog(@"缩放比例------%f",scrollView.zoomScale);
}
//缩放完毕的时候调用
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view {
NSLog(@“********开始缩放");
}
@end