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. 这个是历史原因造成的. ...
随机推荐
- 查看Linux服务器公网IP
参考:https://www.cnblogs.com/pyyu/p/8545896.html 方法1:curl ifconfig.me 方法2:curl cip.cc
- 和Excel函数date同样功能的VBA函数DateSerial用法
Sub 日期别()On Error Resume Nextlastrow = Sheets("运营日报").Range("a1048576").End(xlUp ...
- 笔记23 搭建Spring MVC
搭建一个最简单的SpringMVC示例 1.配置DispatcherServlet DispatcherServlet是Spring MVC的核心.在这里请求会第一次 接触到框架,它要负责将请求路由到 ...
- leetcood学习笔记-55-跳跃游戏
题目描述: 第一次提交: class Solution: def canJump(self, nums: List[int]) -> bool: if len(nums)<=1: retu ...
- MySQL架构和索引
MySQL架构 逻辑架构图: 大概分为四层,这个见仁见义,有不同的分法: 第一层Connectors:处理不同语言与SQL的交互 第二层Connection Pool :连接池,管理缓存用户连接,线程 ...
- thinkphp 模板注释
模板支持注释功能,该注释文字在最终页面不会显示,仅供模板制作人员参考和识别. 大理石平台厂家 单行注释 格式: {/* 注释内容 */ } 或 {// 注释内容 } 例如: {// 这是模板注释内容 ...
- duilib教程之duilib入门简明教程9.界面布局
上一个教程实现的标题栏代码中,并没有看到处理自适应窗口大小的代码,但是窗口大小变化后,按钮的位置会跟着变化,这是因为我们将按钮放到了HorizontalLayout.VerticalLayout,这样 ...
- BZOJ 1911 (APIO 2010) 特别行动队
题目描述 你有一支由n名预备役士兵组成的部队,士兵从1到n编号,要将他们拆分成若干特别行动队调入战场.出于默契考虑,同一支特别行动队中队员的编号应该连续,即为形如(i,i+1,-,i+k)的序列. 编 ...
- POJ 3134 - Power Calculus
迭代加深 //Twenty #include<cstdio> #include<cstdlib> #include<iostream> #include<al ...
- c# 中xml序列化时相同节点存入不同类型值
先上需要序列话的类定义: [System.Xml.Serialization.XmlIncludeAttribute(typeof(DescriptionType))] [System.CodeDom ...