1、CAScrollLayer的简介

  CAScrollLayer用于显示一个滑动图层的一部分,可以确定滑动方向和可视区域面积,限制不滑出区域外!相关属性如下:其中

/* Scroll the contents of the layer to ensure that rect 'r' is visible. */

- (void)scrollToRect:(CGRect)r;

  不是很理解,只做自己的见解!

#import <QuartzCore/CALayer.h>

NS_ASSUME_NONNULL_BEGIN

CA_CLASS_AVAILABLE (10.5, 2.0, 9.0, 2.0)
@interface CAScrollLayer : CALayer //改变layer的原点位置到指定点
- (void)scrollToPoint:(CGPoint)p; //改变layer的可视区域和原点限制 r: CGRectMake(x, y, width, height)
//1、layer的bounds:{{x1, y1}, {width1, height1}}, 原点限制x1<=x && y1<=y
//2、如果layer的width >= width1,height >= height1,原点移动到指定位置就不能滑动
//如果with<width1 ,height< height1 ,可视区域宽高(width+x, height+y)
- (void)scrollToRect:(CGRect)r; //枚举,滑动方向
@property(copy) NSString *scrollMode; @end @interface CALayer (CALayerScrolling) //通过从自身到父视图查找CAScrollLayer,进行对应操作,如果没有就不做处理!
- (void)scrollPoint:(CGPoint)p;
- (void)scrollRectToVisible:(CGRect)r; //返回layer的可视区域,就是bounds属性
@property(readonly) CGRect visibleRect; @end /* `scrollMode' values. */ CA_EXTERN NSString * const kCAScrollNone //禁止滑动
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
CA_EXTERN NSString * const kCAScrollVertically //垂直滑动
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
CA_EXTERN NSString * const kCAScrollHorizontally //水平滑动
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
CA_EXTERN NSString * const kCAScrollBoth //无限制滑动
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0); NS_ASSUME_NONNULL_END

2、CAScrollLayer的简单使用

    CALayer *contentLayer = [CALayer layer];
contentLayer.backgroundColor = [UIColor whiteColor].CGColor;
contentLayer.contents = (id)[UIImage imageNamed:@"pic1.jpg"].CGImage;
contentLayer.frame = CGRectMake(, , CScreenWidth, ); CAScrollLayer *scrollLayer = [CAScrollLayer layer];
scrollLayer.frame = CGRectMake(, , CScreenWidth-,);
[scrollLayer addSublayer:contentLayer];
scrollLayer.scrollMode = kCAScrollBoth;
scrollLayer.backgroundColor = [UIColor redColor].CGColor;
[self.showView.layer addSublayer:scrollLayer];
// scrollLayer.masksToBounds = NO;//默认是YES,改为NO自己可能好懂些
self.layer = scrollLayer;
[self.showView addGestureRecognizer:[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGesture:)]]; - (void)panGesture:(UIPanGestureRecognizer *)pan{
CGPoint trans = [pan translationInView:self.showView];
CGPoint ori =self.layer.bounds.origin;
ori = CGPointMake(ori.x-trans.x, ori.y-trans.y);
[self.layer scrollPoint:ori];
[self.layer scrollToRect:CGRectMake(-50, -50, 100, 100)];
NSLog(@"=======%@",NSStringFromCGRect([self.layer visibleRect]));
[pan setTranslation:CGPointZero inView:self.showView];
}

  (1)原点(-50,-50),所以最大的时候左边和上面有50的距离,最小可视区域宽高是(-50+100,-50+100)

 效果图

[self.layer scrollToRect:CGRectMake(-50, -50, 100, 100)]

  (2)原点(0,0),所以最大的时候左边和上面有0的距离,最小可视区域宽高是(0+100,0+100)

[self.layer scrollToRect:CGRectMake(0, 0, 100, 100)]

  (3)原点(100,100),所以最大的时候左边和上面可以移动100的距离,最小可视区域宽高是(100+214,100+100)

scrollLayer.masksToBounds = YES;

scrollLayer.masksToBounds = NO;

[self.layer scrollToRect:CGRectMake(100, 100, 214, 100)]

 

  (4)不设置scrollTpRect效果图

  常用的是第三种,使大图layer滑动不会到边界外面!

iOS之CAScrollLayer属性简介和使用的更多相关文章

  1. iOS之CAGradientLayer属性简介和使用

    1.CAGradientLayer简介 CAGradientLayer用于制作背景图层的颜色渐变,也就是颜色梯度!相关属性简介: #import <QuartzCore/CALayer.h> ...

  2. iOS之CAReplicatorLayer属性简介和使用

    1.CAReplicatorLayer简介 CAReplicatorLayer用于对图层进行复制,包括图层的动画也能复制!可以看着将某一段事务进行重复! #import <QuartzCore/ ...

  3. iOS之CALayer属性简介

    /* CoreAnimation - CALayer.h Copyright (c) 2006-2017, Apple Inc. All rights reserved. */ #import < ...

  4. iOS之CATextLayer属性简介

    1.CATextLayer简介 CATextLayer快速高效简单地来渲染纯文本.NSAttributedString /* The text layer provides simple text l ...

  5. iOS之CAShapeLayer属性简介

    1.CAShapeLayer需要和贝塞尔曲线一块使用! #import <QuartzCore/CALayer.h> NS_ASSUME_NONNULL_BEGIN CA_CLASS_AV ...

  6. iOS开发-automaticallyAdjustsScrollViewInsets属性

    iOS开发-automaticallyAdjustsScrollViewInsets属性 Available in iOS 7.0 and later. 简单点说就是automaticallyAdju ...

  7. HTML5 Audio and Video 的新属性简介

    前言:HTML5 中 Audio and Video的使用方法比较简单,但就是比较复杂,方法属性多.如果不常用的几乎难以记住,甚至有些人难以区分不同属性和方法的作用,更别说应用了.以下对Audio a ...

  8. IOS UITableView NSIndexPath属性讲解

    IOS UITableView NSIndexPath属性讲解   查看UITableView的帮助文档我们会注意到UITableView有两个Delegate分别为:dataSource和deleg ...

  9. IOS学习5——属性与成员变量

    [转]iOS中属性与成员变量的区别 ios中属性修饰符的作用 1. 属性用property声明 2. 简而言之,对于目前的ios开发,属性和成员变量的区别,完全可以不管. 3. 这个是历史原因造成的. ...

随机推荐

  1. Red and Black 模板题 /// BFS oj22063

    题目大意: Description There is a rectangular room, covered with square tiles. Each tile is colored eithe ...

  2. jdbc_mysql----函数助手参数化

    第一个值填写的是文件路径 第二个值填写的是从第几个开始执行,从0开始

  3. YARN设计思路

  4. python日常使用

    os.path.splitext('C:\py\wxPython.gif')  得到扩展名的函数 os.remove(删除文件) os.listdir(显示该目录下的文件) os.getcwd(获取当 ...

  5. Qt Creator配置

    1.安装Git sudo apt install git 2.配置Git 用户和邮箱: git config --global user.name "xxx" git config ...

  6. Html+css3记录

    一.html5新特性  常用语义标签:nav footer header section mark  功能标签 video audio iframe canvas(画布和绘图功能)  input新ty ...

  7. 最大流拆点——poj3281

    /* 因为牛的容量为1,把牛拆点 按照s->f->cow->cow->d->t建图 */ #include<iostream> #include<cst ...

  8. Codeforces-GYM101873 G Water Testing 皮克定理

    题意: 给定一个多边形,这个多边形的点都在格点上,问你这个多边形里面包含了几个格点. 题解: 对于格点多边形有一个非常有趣的定理: 多边形的面积S,内部的格点数a和边界上的格点数b,满足如下结论: 2 ...

  9. 没有找到mfc100.dll

    转自VC错误:http://www.vcerror.com/?p=86 问题描述: 生成的exe文件在编译的时候会提示"没有找到mfc100.dll",这个时候需要更改配置为静态编 ...

  10. 在windows中用cmd命令执行python无限循环程序如何停止

    在windows中用cmd命令测试python带有无限循环的程序,当想要终止时, 即linux中的Ctrl + D 相似的功能时可以用 Ctrl + Pause Break, 有FN功能键的可能要使用 ...