UIScrollView的属性和用法
主要功能:管理图片的 滚动 和 缩放
主要的属性和作用:
CGPoint contentOffSet //监控目前滚动的位置 视图滚动出去的偏移量
CGSize contentSize //滚动范围的大小 视图显示的大小
UIEdgeInsets contentInset //视图在scrollView中的位置 (视图没有滚动出去,内部的偏移量)
id<UIScrollerViewDelegate>
delegate //设置协议
BOOL directionalLockEnabled //指定控件是否只能在一个方向上滚动
BOOL bounces //控制控件遇到边框是否反弹
BOOL alwaysBounceVertical //控制垂直方向遇到边框是否反弹
BOOL alwaysBounceHorizontal //控制水平方向遇到边框是否反弹
BOOL pagingEnabled //控制控件是否整页翻动
BOOL scrollEnabled //控制控件是否能滚动
BOOL showsHorizontalScrollIndicator //控制是否显示水平方向的滚动条
BOOL showsVerticalScrollIndicator //控制是否显示垂直方向的滚动条
UIEdgeInsets scrollIndicatorInsets //指定滚动条在scrollerView中的位置
UIScrollViewIndicatorStyle indicatorStyle //设定滚动条的样式
float decelerationRate //改变scrollerView的减速点位置
BOOL tracking //监控当前目标是否正在被跟踪
BOOL dragging //监控当前目标是否正在被拖拽
BOOL decelerating //监控当前目标是否正在减速
BOOL delaysContentTouches //控制视图是否延时调用开始滚动的方法
BOOL canCancelContentTouches //控制控件是否接触取消touch的事件
float minimumZoomScale //缩小的最小比例
float maximumZoomScale //放大的最大比例
float zoomScale //设置变化比例
BOOL bouncesZoom //控制缩放的时候是否会反弹
BOOL zooming //判断控件的大小是否正在改变
BOOL zoomBouncing //判断是否正在进行缩放反弹
BOOL scrollsToTop //控制控件滚动到顶部
#import "RootView.h"
@implementation RootView
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self p_setupViews];
}
return self;
}
-(void)p_setupViews{
self.backgroundColor = [UIColor yellowColor];
//*************************第一部分 滚动 **********************************
// 创建
self.scrollView = [[UIScrollView alloc]init];
self.scrollView.frame = CGRectMake(50, 50, 250, 250);
self.scrollView.backgroundColor = [UIColor greenColor];
// contentSize (一般来说图片有多大,这里的contentSize就是多大)
// 作用:设置内容大小,当contentSize大于frame的宽高时可以滚动(默认状态下,需要滚动可修改)。小于等于时不滚动。
self.scrollView.contentSize = CGSizeMake(200, 200);
// contentOffset
// 作用:设置偏移量,确定显示视图的位置,默认是(0,0)
self.scrollView.contentOffset = CGPointMake(50, 50);
// 手机的状态栏可以让图片显示顶部
// scrollsToTop
// 作用,点击状态栏,然视图回到顶部,默认为YES;
self.scrollView.scrollsToTop = NO;
// pagingEnabled
// 作用:是否整页滑动,默认是NO。
self.scrollView.pagingEnabled = YES;
// bounces
// 作用:滑到边缘时,是否有回弹效果,默认为YES;
// self.scrollView.bounces = NO;
// scrollEnabled
// 作用:能否滚动
self.scrollView.scrollEnabled = YES;
// 水平滚动条
self.scrollView.showsHorizontalScrollIndicator = NO;
// 垂直滚动条
self.scrollView.showsVerticalScrollIndicator = NO;
// 水平反弹 (bounces 属性设置为NO时 bounces设置优先)
// 作用:当contentSize 小于 frame 的宽高时生效 默认为
self.scrollView.alwaysBounceHorizontal = YES;
// 垂直反弹 (bounces 属性设置为NO时 bounces设置优先)
// 作用:当contentSize 小于 frame 的宽高时生效 默认为
self.scrollView.alwaysBounceVertical = YES;
[self addSubview:_scrollView];
//*******************第二部分 缩放****************************
//创建imageView
self.imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"zhuomian.png"]];
self.imageView.frame = CGRectMake(0, 0, 200, 200);
[self.scrollView addSubview:_imageView];
// 创建imageView
self.imageView = [[UIImageView alloc]initWithFrame:self.bounds];
self.imageView.image = [UIImage imageNamed:@"img01.jpg"];
// 创建UIScrollView
self.scrollView = [[UIScrollView alloc]initWithFrame:self.bounds];
self.scrollView.backgroundColor = [UIColor grayColor];
[self addSubview:_scrollView];
// 缩放最小比 更多的用法是恢复原来的大小 如双击一下变大或变小 再双击一下恢复原大小
self.scrollView.minimumZoomScale = 0.5;
// 缩放最大比
self.scrollView.maximumZoomScale = 2.0;
// 改变比例 设置变化比例
// self.scrollView.zoomScale = 0.5;
// 缩放反弹 其实就是一个动画效果
self.scrollView.bouncesZoom = NO;
// 缩放的实现必须使用代理
// 将imageView放到ScrollView上
[self.scrollView addSubview:_imageView];
}
// touchesBegan 跟响应者链有关
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
self.scrollView.zoomScale = 0.5;
}
@end
RootViewController.m
scrollView代理方法 <UIScrollViewDelegate>
@interface RootViewController ()<UIScrollViewDelegate>
@property(nonatomic ,strong)RootView * rv;
@end
@implementation RootViewController
-(void)loadView{
self.rv = [[RootView alloc]initWithFrame:[UIScreen mainScreen].bounds];
self.view = _rv;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
// scrollView 设置代理
self.rv.scrollView.delegate = self;
}
#pragma mark --scrollView代理方法 <UIScrollViewDelegate>
// 将要开始拖拽
-(void)scrollViewBeginDragging:(UIScrollView *)scrollView{
NSLog(@"将要开始拖拽");
}
// 已经开始滑动
// 触发条件:contentOffSet 发生改变时
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
// 当里面有中文是,后面输入提示的就不准确了
NSLog(@"滑动中...%@",NSStringFromCGPoint(scrollView.contentOffset));
}
// 将要停止拖拽 (手停下的时候还有可能运行一段距离)
// 触发条件:手指离开屏幕,而并不是手指停下
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{
NSLog(@"将要停止拖拽");
}
// 停止拖拽
//
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
NSLog(@"停止拖拽...");
}
// 将要开始减速
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
NSLog(@"将要开始减速");
}
// 减速完成
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
NSLog(@"减速完成");
}
// 返回将要缩放的视图
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
// 返回一个子视图
// return self.rv.imageView;
// 返回所有子视图 推荐用这种方式
return [scrollView subviews][0];
}
// 将要开始缩放
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view{
NSLog(@"将要开始缩放");
}
// 缩放完成
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale{
NSLog(@"缩放完成");
}
// 正在缩放
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
NSLog(@"正在缩放");
// 将imageView的中心点设置为scrollView的中心点
if (scrollView.zoomScale < 1) {
self.rv.imageView.center = scrollView.center;
}else{
CGRect temp = self.rv.imageView.frame;
temp.origin = CGPointMake(0, 0);
self.rv.imageView.frame = temp;
}
}
// 接收内存预警
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end