UIday0701:UIScrollView的属性和用法

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值