CALayer 一个管理基础图容并允许您执行动画内容的对象。 Overview Layers 通常被用于去提供views的后备存储....- init Returns an initialized CALayer object.
首先先看一下苹果对两个对象的描述 UIView:http://blog.csdn.net/ZY_FlyWay/article/details/58611627 CALayer:http://blog.csdn.net...article/details/59039800 我们从苹果官方文档可以知道: UIView 继承于 UIResponder (UIResponder继承于NSObject) CALayer...2、UIView和CALayer有什么关系呢。
和UIView最大的不同是,CALayer不处理用户的交互。...UIView和NSView都有一个用于展示的CALayer属性对象,二者的区别就是处理用户触摸事件的机制的不同。...寄宿图 事实上,CALayer类能够包含一张你喜欢的图片,layer中所包含的这张图片称为CALayer的寄宿图。...上面我们通过CALayer在一个普通的UIView中展示了一张图片。...contentsRect CALayer的contentsRect属性允许我们在图层边框里显示寄宿图的一个子域。
CALayer负责视图中显示内容和动画.所有动画都是作用在CALayer上的....如 : bounds : 用于设置CALayer的宽度和高度,修改这个属性会产生缩放动画. background : 用户设置CALayer的背景色, 修改这个属性会产生背景色的渐变动画. position...: 用于设置CALayer的位置,修改这个属性会产生平移动画....其实,对比CALayer,UIView多了一个事件处理的功能,也就是说,CALayer不能处理用户的触摸事件,而UIView可以.所以,如果显示出来的东西需要跟用户进行交互的话,用UIView.UIView...用来接收和处理系统事件,触摸事件.如果不需要跟用户进行交互,用UIView或者CALayer都可以.当然,CALayer的性能会高一些,因为它少了事件处理的功能,更加轻量级 ---- 二、CALayer
CALayer作为一个低级的,可以承载绘制内容的底层对象出现在该框架中。 CALayer是用来绘制内容的,对内容进行动画处理依赖与UIView来进行显示,不能处理用户事件。...UIView侧重于对显示内容的管理,CALayer侧重于对内容的绘制。 UIView和CALayer是相互依赖的关系。...UIView依赖与CALayer提供的内容,CALayer依赖UIView提供的容器来显示绘制的内容。...归根到底CALayer是这一切的基础,如果没有CALayer,UIView自身也不会存在,UIView是一个特殊的CALayer实现,添加了响应事件的能力。...UIView来自CALayer,高于CALayer,是CALayer的高层实现与封装。UIView的所有特性来源于CALayer支持。 参考: 图片引用
为方便对CALayer的学习,特记录以下内容,整理自ios核心动画高级技巧 · GitBook (墙裂推荐阅读此翻译文档) contents 属性 这个属性的类型被定义为id(这是由于MacOSX...contentsScale maskToBounds 默认情况下,UIView会绘制超过边界的内容或子视图,CALayer也一样。
2.CALayer的继承结构:NSObject 直接从NSObject继承,因为缺少了UIResponder类,所以CALayer不能响应任何的用户事件。...2.CALayer是在/System/Library/Frameworks/QuartzCore.framework定义的。而且CALayer作为一个低级的可以承载绘制内容的底层对象出现在该框架中。...综上来看UIView与CALayer的最大区别在于UIView可以响应用户事件,而CALayer不可以。UIView侧重于对显示内容的管理,CALayer侧重于对内容的绘制。...由此可见UIView确实是CALayer 的高级封装。 UIView和CALayer相互依赖,UIView依赖于CALayer提供的内容,CALayer依赖UIView提供的容器来显示绘制的内容。...但归根到底CALayer是这一切的基础,如果没有CALayer,UIView自身也不会存在,UIView是一个特殊的CALayer的实现,添加了响应事件的能力。
anchorPoint:CALayer中心点,动画特效的中心点,取值区间[0.0, 1.0],默认为(0.5, 0.5); position:CALayer中心点坐标; frame.origin
https://www.jianshu.com/p/09f4e36afd66 什么是CALayer: 总结:能看到的都是uiview,uiview能显示在屏幕上是因为它内部的一个层calyer层。...在创建uiview的时候,uiview的内部会自动创建一个层(calayer对象)通过uiview的layer属性可以访问这个层。...CALayer的基本功能 通过操作CALayer对象,可以调整uiview的一些外观属性。比如阴影,圆角,边框的颜色等、 项目中的具体使用 1.做渐变。...有时候项目中可能要用到一个渐变的图片,如果用图片的话 是会简单很多,但是也会相应的占用内存,增加开销,而Calayer的效率相对来说就会高很多。...两种方式,一种是使用 n张图片去循环,这样的话对内存的开销比较大,不建议使用,第二种就是采用CALayer的相关属性 加上核心动画来实现:代码如下: //2.渐变转换为图形形成动画 CALayer
CALayer有一个属性叫做mask。 这个属性本身就是个CALayer类型,有和其他图层一样的绘制和布局属性。...implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //创建一个蓝色的Layer CALayer...*foregroundLayer = [CALayer layer]; foregroundLayer.bounds = CGRectMake(0, 0, 100...@synthesize circle; - (void)viewDidLoad { [super viewDidLoad]; //创建一个CAShape CALayer...*bgLayer = [CALayer layer]; //设置大小颜色和位置 bgLayer.bounds = CGRectMake(0, 0, 200,
最后,总结UIView(视图)与CALayer(图层)的关系:UIView = CALayer(负责绘制显示内容的功能) + 处理用户交互的功能。...下面是一些UIView没有暴露出来的CALayer的功能: 设置阴影、圆角、带颜色边框 3D变换 非矩形范围 透明遮罩 多级非线性动画 二、CALyer寄宿图与contents属性 CALayer具有和...测试CALayer寄宿图2.png 另外,类似的对于CALayer的显示设置和UIView具有下面的对应关系(这里仅简单总结概念和用处): CALayer属性 UIView属性 属性说明 contentsGravity...重绘并保存了因此产生的图片;CALayer有一个可选的delegate属性,实现了CALayerDelegate非正式协议,当CALayer需要一个内容特定信息时,就会从协议中请求;而当需要被绘制时,CALayer...时,CALayer就会转而尝试调用此的方法; - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx; 在调用方法2之前,CALayer
先简单概括一下 UIView 与 CALayer 各自的作用。...其实上面已经提到 CALayer 和 UIView 其实不属于同一个框架,CALayer 所属的 QuartzCore 框架是可以跨平台使用的,在 iOS 以及 macOS 中都可以使用,但是 UIKit...open func hitTest(_ p: CGPoint) -> CALayer? open func convert(_ p: CGPoint, from l: CALayer?)...CALayer Tree CALayer 是所有 layer 的基类,其派生类会有一些特定的功能,比如绘制文本的 CATextLayer、渐变效果的 CAGradientLayer 等等。...页面渲染流程 那么为什么 CALayer 可以呈现可视化内容呢? 因为 CALayer 基本等同于一个 纹理。纹理是 GPU 进行图像渲染的重要依据。
CALayer的基本操作. 1....CALayer简介: CALayer我们又称为层,在每个UIView内部都有一个layer的属性,UIView之所以能够显示,就是因为它里面有layer层,才具有显示的功能,我们通过操作CALayer...自定义CALayer. #### 2.1 如何自定义Layer. 自定义CALayer的方式创建UIView的方式非常相似....UIView和CALayer都能够显示东西,该怎样选择? >对比CALayer,UIView多了一个事件处理的功能。...也就是 **手动创建的CALayer对象,都存在着隐式动画** >列举常见的Animatable Properties: 1. bounds:CALayer的宽度和高度,修改时产生缩放动画。
CALayer CALayer属于QuartzCore框架,用于在iOS和Mac OS系统上可见元素的绘制,和属于UIKit框架的UIView的关系是,UIView默认会创建一个CALayer属性...,用于图象的绘制和显示.当然,CALayer也可以单独创建....区别 UIView可以处理用户交互事件,而CALayer不行....CALayer具备以下UIView没有的功能: 阴影, 圆角, 边框 3D变换 非矩形范围 透明遮罩 多级非线性动画 布局 要分析CALayer的anchorPoint和position属性,首先要讨论一下...CALayer的布局.
看了iOS6编程实践第9章后,总结一下UIView和CALayer的异同点: UIView 负责绘制与事件处理,而CALayer只负责绘制。 UIView的绘制也是交给CALayer的。...UIView和CALayer都可以有下一层,都是树状结构。 自定义的UIView重写drawRect,自定义的CALayer重写drawInContext或重写委托者的drawLayer方法。...UIView会在第一次显示或需要重绘时自动调用drawRect,而CALayer不会,需要显示调用setNeedsDisplay。
anchorPoint) 3.视图与图层的坐标系 一、Frame与Bounds的区别 我们已经知道UIView的很多布局属性其实都来自于图层;UIView的布局属性包括:frame、bouns、center,分别对应了CALayer...UIView属性 CALayer属性 属性说明 frame frame 表示相对于其父视图的坐标位置 bounds bounds 表示相对于其自身的坐标位置,{0,0}通常是其左上角 center position...锚点动画.gif 三、视图与图层的坐标系 CALayer给不同坐标系之间的图层转换提供了一些工具类方法: - (CGPoint)convertPoint:(CGPoint)p fromLayer:(nullable...CALayer *)l; - (CGPoint)convertPoint:(CGPoint)p toLayer:(nullable CALayer *)l; - (CGRect)convertRect...:(CGRect)r fromLayer:(nullable CALayer *)l; - (CGRect)convertRect:(CGRect)r toLayer:(nullable CALayer
正文:你给我解释清楚,都有了CALayer了,为什么还要UIView? UIView继承自UIResponder,主要特点是可以响应触摸事件。而CALayer实际是图层内容管理。...是的,可能UIView就和CALayer合体成了一个叫“UILayer”的东西了。这个UILayer是一个全能的Layer,可以负责管理显示内容,也能处理触摸事件,吊吊的,对不对! 好的!...这次就UIView和CALayer来分析,就可以得出一些东西。 机制与策略分离 更多的不可变 各司其职 漏的更少 1....CALayer也可以看做是一种机制,提供图层绘制,你们可以翻开CALayer的头文件看看,基本上是没怎么变过的,而UIView可以看做是策略,变动很多。越是底层,越是机制,越是机制就越是稳定。...比如UIView遮蔽了大部分的CALayer接口,抽取构造出更易用的frame和动画实现,这样上手更容易。 总结 以前或多或少的了解过或者听过单一自责原则。
所谓隐式动画,其实是指我们可以在不设定任何动画类型的情况下,仅仅改变CALayer的一个可做动画的属性,就能实现动画效果。...二、隐式动画的原理 当我们改变一个CALayer属性时,Core Animation是如何判断动画类型和持续时间呢?实际上动画执行的时间取决于当前事务的设置,动画类型则取决于图层行为。...测试隐式动画事务.gif 可以看到,CALayer颜色的渐变动画已经变为了3秒,而旋转动画由于是默认事务变化,仍然以0.25秒快速执行。...2.图层行为 我们上述的实验对象是一个独立图层,如果直接对UIView或者CALayer关联的图层layer改变动画属性,这样是没有隐式动画效果的,这说明虽然Core Animation对所有的CALayer...为了更好的理解中一点,我们需要知道隐式动画是如何实现的: 我们把改变属性时CALayer自动执行的动画称作行为,当CALayer的属性被修改时,它会调用-actionForKey:方法传递属性名称,我们可以找到这个方法的具体说明如下
认识CALayer 创建Layer和Layer的基本几个简单的属性,不好说明的以后会单独拿出来做例子。...import "ViewController.h" @interface ViewController () @end @implementation ViewController { CALayer...self.view.layer.geometryFlipped = YES; [self layerDemo]; } //创建一个图层 -(void)layerDemo{ yellowLayer = [CALayer...yellowLayer.bounds; textLayer.string = @"我们不一样"; [yellowLayer addSublayer:textLayer]; CALayer...* blueLayer = [CALayer layer]; blueLayer.frame = CGRectMake(50, 200, 100, 100); blueLayer.backgroundColor
先上效果图: CALayer系列.gif CGContextRef、UIBezierPath、文本属性Attributes.gif 一、CAEmitterLayer 粒子属性 //设置发射器 CAEmitterLayer
领取专属 10元无门槛券
手把手带您无忧上云