iOS之CAScrollLayer属性简介和使用
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属性简介和使用的更多相关文章
- iOS之CAGradientLayer属性简介和使用
1.CAGradientLayer简介 CAGradientLayer用于制作背景图层的颜色渐变,也就是颜色梯度!相关属性简介: #import <QuartzCore/CALayer.h> ...
- iOS之CAReplicatorLayer属性简介和使用
1.CAReplicatorLayer简介 CAReplicatorLayer用于对图层进行复制,包括图层的动画也能复制!可以看着将某一段事务进行重复! #import <QuartzCore/ ...
- iOS之CALayer属性简介
/* CoreAnimation - CALayer.h Copyright (c) 2006-2017, Apple Inc. All rights reserved. */ #import < ...
- iOS之CATextLayer属性简介
1.CATextLayer简介 CATextLayer快速高效简单地来渲染纯文本.NSAttributedString /* The text layer provides simple text l ...
- iOS之CAShapeLayer属性简介
1.CAShapeLayer需要和贝塞尔曲线一块使用! #import <QuartzCore/CALayer.h> NS_ASSUME_NONNULL_BEGIN CA_CLASS_AV ...
- iOS开发-automaticallyAdjustsScrollViewInsets属性
iOS开发-automaticallyAdjustsScrollViewInsets属性 Available in iOS 7.0 and later. 简单点说就是automaticallyAdju ...
- HTML5 Audio and Video 的新属性简介
前言:HTML5 中 Audio and Video的使用方法比较简单,但就是比较复杂,方法属性多.如果不常用的几乎难以记住,甚至有些人难以区分不同属性和方法的作用,更别说应用了.以下对Audio a ...
- IOS UITableView NSIndexPath属性讲解
IOS UITableView NSIndexPath属性讲解 查看UITableView的帮助文档我们会注意到UITableView有两个Delegate分别为:dataSource和deleg ...
- IOS学习5——属性与成员变量
[转]iOS中属性与成员变量的区别 ios中属性修饰符的作用 1. 属性用property声明 2. 简而言之,对于目前的ios开发,属性和成员变量的区别,完全可以不管. 3. 这个是历史原因造成的. ...
随机推荐
- 使用neo4j图数据库的import工具导入数据 -方法和注意事项
背景 最近我在尝试存储知识图谱的过程中,接触到了Neo4j图数据库,这里我摘取了一段Neo4j的简介: Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中.它是一个嵌 ...
- 【Wikioi】P1401 逆序统计 代码
题目链接:http://wikioi.com/solution/list/1401/ 题解链接:http://user.qzone.qq.com/619943612/blog/1377265690 代 ...
- Tesseract&tesseractOCRiOS
安装tesseract在上篇. 1.安装之后默认语言包只有英文包,在github上下载中文简体,链接:https://github.com/tesseract-ocr/tessdata 然后放入tes ...
- LINUX centos 7.2/7.3 搭建LAMP环境
首先我们先查看下centos的版本信息 #适用于所有的linux lsb_release -a #或者 cat /etc/redhat-release #又或者 rpm -q centos-relea ...
- Android开发 navigation的跳转动画实现
前言 此篇博客只简短的介绍navigation如何添加跳转页面的动画属性,如果你还为接触了解过navigation.建议你看我另一篇博客Android开发 navigation入门详解 创建动画xml ...
- python定时任务模块APScheduler
一.简单任务 定义一个函数,然后定义一个scheduler类型,添加一个job,然后执行,就可以了 5秒整倍数,就执行这个函数 # coding:utf-8 from apscheduler.sche ...
- 手工编写JavaWeb项目
手工编写JavaWeb项目 一.打开Tomcat服务器 二.编写简单的web项目 三.访问项目 并且,tomcat服务器也是可以直接访问.txt的,其实就和其它的web服务器一样,什么都可以访问,和之 ...
- C#实现语音
.net 4.0开始 Type type = Type.GetTypeFromProgID("SAPI.SpVoice"); dynamic spVoice = Activator ...
- day 61 Django基础之django分页
Django基础之django分页 一.Django的内置分页器(paginator) view from django.shortcuts import render,HttpRespons ...
- PAT甲级——A1112 Stucked Keyboard【20】
On a broken keyboard, some of the keys are always stucked. So when you type some sentences, the char ...