首先先看一下苹果对两个对象的描述 UIView:http://blog.csdn.net/ZY_FlyWay/article/details/58611627 CALayer:http://blog.csdn.net...article/details/59039800 我们从苹果官方文档可以知道: UIView 继承于 UIResponder (UIResponder继承于NSObject) CALayer...1、UIResponder是干嘛的呢? 答:看完这一个就懂了 一句话UIVIew可以响应事件,而Layer不可以。 2、UIView和CALayer有什么关系呢。...从官方文档可以了解到:UIView初始化的时候会自动创建Layer,而layer会自动指定代理是view。所以他俩是代理和被代理的关系。 3、那么layer在view中有什么用呢? ...view中对于图片的渲染,和一些动画操作都是layer完成的,view只是呈现layer的工作结果和处理交互响应事件。
UIView和CALayer都继承自NSObjet。 继承结构 UIView的继承结构为: UIResponder : NSObject。...CALayer作为一个低级的,可以承载绘制内容的底层对象出现在该框架中。 CALayer是用来绘制内容的,对内容进行动画处理依赖与UIView来进行显示,不能处理用户事件。...UIView侧重于对显示内容的管理,CALayer侧重于对内容的绘制。 UIView和CALayer是相互依赖的关系。...归根到底CALayer是这一切的基础,如果没有CALayer,UIView自身也不会存在,UIView是一个特殊的CALayer实现,添加了响应事件的能力。...UIView来自CALayer,高于CALayer,是CALayer的高层实现与封装。UIView的所有特性来源于CALayer支持。 参考: 图片引用
使用CAGradientLayer可以实现颜色的渐变, 我们先看下头文件 @interface CAGradientLayer : CALayer @property(nullable, copy)...colors; //颜色渐变的数组 @property(nullable, copy) NSArray *locations; //渐变颜色的区间分布,locations的数组长度和color...默认值是(0.5,1.0) @property(copy) NSString *type; //默认值是kCAGradientLayerAxial,表示按像素均匀变化。...除了默认值也无其它选项 @end 下面是我用上面的代码实现的最终效果,startPoint是(0,0),endPoint是(1,1)。 ? 下面我们试试用这个来实现一个渐变色的圆环, ?...需要说明的是CAGradientLayer只能实现矩形范围内的颜色渐变, 那渐变的圆环要如何实现呢? mask 对了 首先我们创建两个挨着的矩形渐变色块, 并把两个色块添加到同一个layer ?
虽然老司机从小到大都是数学课代表,不过我要很郑重的告诉你,数学是一门靠悟性的学问,不是我讲给你听,你就能消化的,所以关于矩阵计算什么的,请各位同学自己消化理解(咳咳,我会告诉你我高数、线代、概率没有一科过...值得注意的是,以上两个旋转api中x/y/z三个参数均为指定旋转轴,可选值0和1,0代表此轴不做旋转,1代表作旋转。...这里需要注意的是M34的赋值一定要写在矩阵变换前面,具体为什么说实话老司机也不知道。...你可能还不懂,其实你看的正方体是六个CALayer经过矩阵变换拼成的实实在在的正方体。...最重要的一点是,当图层加入到CATransformLayer中以后,hitTest和convertPoint两个方法就失效了,请注意这点。
https://www.jianshu.com/p/09f4e36afd66 什么是CALayer: 总结:能看到的都是uiview,uiview能显示在屏幕上是因为它内部的一个层calyer层。...CALayer的基本功能 通过操作CALayer对象,可以调整uiview的一些外观属性。比如阴影,圆角,边框的颜色等、 项目中的具体使用 1.做渐变。...有时候项目中可能要用到一个渐变的图片,如果用图片的话 是会简单很多,但是也会相应的占用内存,增加开销,而Calayer的效率相对来说就会高很多。...*gradientLayer2 = [CAGradientLayer layer]; gradientLayer2.colors = @[(__bridge id)[UIColor redColor...两种方式,一种是使用 n张图片去循环,这样的话对内存的开销比较大,不建议使用,第二种就是采用CALayer的相关属性 加上核心动画来实现:代码如下: //2.渐变转换为图形形成动画 CALayer
UIView和CALayer都是源自NSObject。 UIView的继承结构为:UIResponder:NSObject。可以看出UIView的直接父类为UIResponder类。...我们都知道UIKit主要是用来构建用户界面并且是可以响应事件的。 2.CALayer是在/System/Library/Frameworks/QuartzCore.framework定义的。...UIView和CALayer相互依赖,UIView依赖于CALayer提供的内容,CALayer依赖UIView提供的容器来显示绘制的内容。...但归根到底CALayer是这一切的基础,如果没有CALayer,UIView自身也不会存在,UIView是一个特殊的CALayer的实现,添加了响应事件的能力。...UIwindow是UIView的子类,UIWindow的主要作用:一是提供一个区域来显示UIView,二是将事件(event)的分发给UIView,一个应用基本上只有一个UIWindow.
但实际上UIView是对CALayer封装,在CALayer的基础上再添加交互功能。UIView的显示必须依赖于CALayer。...因此对一个view进行动画,本质上是对该view的.layer进行动画操纵。CALayer的设计主要是了为了内容展示和动画操作,CALayer本身并不包含在UIKit中,它不能响应事件。...layer.png CALayer 最常用的两个子类: CAGradientLayer(用于颜色渐变的实现) // 创建 UIView 用来承载渐变色 UIView *myView = [[UIView...path只对CALayer的anchorPoint和position起作用。...键-值编码协议的扩展, 参数必须是CALayer的某一项属性,你的代码会对应的去改变该属性的效果 具体可以填写什么请参考上面的URL,切勿乱填!
也就是今天的主角CAGradientLayer。 CAGradientLayer是CALayer图层类的子类,用于处理渐变色的层结构。...CAGradientLayer的坐标系统是从坐标(0,0)到(1,1)绘制的矩形。 ?...CAGradientLayer属性介绍 colors:渐变颜色数组 locations:渐变颜色的区间分布(分割点),locations的数组长度和colors一致。...默认值是:(0.5, 0.0)。 endPoint:映射locations中结束位置,用单位向量表示。比如(1, 1)表示到右下角变化结束。默认值是:(0.5, 1.0)。...type:默认值是kCAGradientLayerAxial,表示按像素均匀变化。 CAGradientLayer例子 最简单的三原色渐变例子 效果展示 ?
下面来实现一下带有渐变色的进度条,原理很简单,刚刚画的是一条默认是黑色的线条,我们把黑色替换成一条渐变色的线条就可以了。...环形渐变色线条的制作:第一步使用cashapelayer绘制出渐变层,应为它只能指定两个点之间进行渐变,所以这里需要两个cashapelayer,左边一个和右边一个,看一下效果图代码实现?...12345678910111213141516//生成渐变色 calayer *gradientlayer = [calayer layer]; //左侧渐变色 cagradientlayer...是一致的。...总结以上就是这篇文章的全部内容了,希望本文的内容对大家的学习和工作能带来一定的帮助,如果有疑问大家可以留言交流。
可以这样理解,是将maskView每个point的alpha赋值给View的重叠部分相对应的point,这样view的重叠每个point都有个alpha值了,view重叠部分就可能显示多种透明色。...效果.png 这个效果的实现关键点在于 动画执行时间的延迟设置,这个时间的计算和设置,直接决定效果能否缓缓出来,因为代码的执行速度是很快的,而动画又是移步执行的,如果设置动画的执行时间为0,你会看到图片瞬间改变...效果1.png 途中圆圈羽化的边缘是用的图片填充,对CALayer内容的图片填充才有的羽化边缘的形状,才出的这样的效果,这其实是 maskLayer的使用了,具体可以参考我的代码查看。...可以结合CAGradientLayer用来实现颜色滚动渐变 初始化一个CAGradientLayer 设置一个CABasicAnimation 用来做CAGradientLayer 的动画 CAGradientLayer.mask...= label.layer; Lable的layer 赋值给 CAGradientLayer的maskLayer即可 效果如下: ?
正文:你给我解释清楚,都有了CALayer了,为什么还要UIView? UIView继承自UIResponder,主要特点是可以响应触摸事件。而CALayer实际是图层内容管理。...UILayer 假如UIKit不是出自苹果之手,而是来自于我们,可能会出现什么情况呢?是的,可能UIView就和CALayer合体成了一个叫“UILayer”的东西了。...这次就UIView和CALayer来分析,就可以得出一些东西。 机制与策略分离 更多的不可变 各司其职 漏的更少 1....CALayer也可以看做是一种机制,提供图层绘制,你们可以翻开CALayer的头文件看看,基本上是没怎么变过的,而UIView可以看做是策略,变动很多。越是底层,越是机制,越是机制就越是稳定。...比如UIView遮蔽了大部分的CALayer接口,抽取构造出更易用的frame和动画实现,这样上手更容易。 总结 以前或多或少的了解过或者听过单一自责原则。
CALayer CALayer属于QuartzCore框架,用于在iOS和Mac OS系统上可见元素的绘制,和属于UIKit框架的UIView的关系是,UIView默认会创建一个CALayer属性...,用于图象的绘制和显示.当然,CALayer也可以单独创建....根据上述文档我们知道,frame属性是通过position和anchorPoint共同决定的,那么所说的function又是什么呢?...CALayer的position点是哪一点呢? anchorPoint与position有什么关系?...frame和bounds比较好理解,bounds可以视为x坐标和y坐标都为0的frame,那position、anchorPoint是什么呢?先看看两者的原型,可知都是CGPoint点。
设置一个上面有gif 和 要显示的文字label的ViewB。...渐变图层 #以下是渐变图层的实现方法 CAGradientLayer *la = [[CAGradientLayer alloc]init]; la.frame = gradientView.bounds...默认的是一行铺开的长度。...#除了CALayer,CAAnimation也采纳了此协议,用来实现动画的时间系统....()+延迟的秒数,因为beginTime是指其父级对象的时间线上的某个时间, # timeOffset :则是active local time的偏移量.
前言 强大的UIView是基于 CALayer实现的,它的重要性不言而喻,相信大家也都有自己的研究和理解,今天这片文章里的内容是几个关键点的补充。...CALayer 和 UIView的关系 CALayer是Core Animation的基础,UIKit 相关内容实现的基础 简单来说,View和Layer最大的区别就是View可以接受用户输入(例如触摸...CALayer是什么?...摘自官网的一句话-Layers Provide the Basis for Drawing and Animations(Layers是绘图和动画的基础) Layer是在3D空间中的2D平面。...** Layer支持继承,支持添加Sublayer,支持对sublayer进行层次调整** 常用的Layer子类 CAEmitterLayer 发射器层,用来控制粒子效果 CAGradientLayer
今天主要通过实现一个音乐播放状态的展示条,还有一个点赞的动画效果,来看看 CAReplicatorLayer、CAEmitterLayer和CAGradientLayer这三个专用层。...就是最基本的建立一个CALayer,设置了frame,设置了锚点,设置了背景颜色,加入了上下移动的动画。 等等,为什么这里背景颜色是白色吶?白色不是就看不见了嘛?别着急,第二步里面答案就揭晓啦。...来,我们一起对照看看两个复制层上面有什么区别。...这个没什么好解释的,就是点一下把状态改一下。...CAGradientLayer CAGradientLayer是用来生成两种或更多颜色平滑渐变的。
QuartzCore.CAValueFunction import QuartzCore.CAMediaTiming import QuartzCore.CAMediaTimingFunction // 特殊图层 import QuartzCore.CALayer...QuartzCore.CAEmitterCell // 粒子特效 Cell import QuartzCore.CAEmitterLayer // 粒子特效 图层 import QuartzCore.CAGradientLayer...实际上可以看作同一个框架,它们互相引用,它们基于Metal和CoreGraphics,主要用于图形渲染和动画 提供了动画接口(属性动画、关键帧动画、组动画等) 提供了几何变换接口,是对CoreGraphics...的CGAffineTransform进一步封装 封装了CALayer,它是使视图呈现出来的基础类 封装了一些特殊用途的图层Layer(如粒子特效CAEmitterLayer、渐变CAGradientLayer...,为静态和视频图像提供接近实时的处理,CoreImage提供如下功能 滤镜:内置多个图像滤镜 滤镜图表:是一个链接在一起的滤镜网络 ,使得一个滤镜的输出可以是另一个滤镜的输入,以达到创建自定义滤镜的效果
,在以前的一片博客中有详细的介绍和范例,这里不再重复,地址如下: 粒子效果的应用和火焰范例:http://my.oschina.net/u/2340880/blog/485095 二、CAGradientLayer... CAGradientLayer是用于色彩梯度展示的layer图层,通过CAGradientLayer,我们可以很轻松的创建出有过渡效果的色彩图。...CAReplicatorLayer *reLayer = [CAReplicatorLayer layer]; reLayer.position = CGPointMake(0, 0); CALayer... * layer= [CALayer layer]; [reLayer addSublayer:layer]; [self.view.layer addSublayer:reLayer]...四、CAShapeLayer CAShapeLayer是图形layer层,我们可以自定义这个层的形状。
CATransformLayer并不平面化它的子图层,所以它能够用于构造一个层级的3D结构 第4篇:CAGradientLayer CAGradientLayer是用来生成两种或更多颜色平滑渐变的。...虚拟属性 之前提到过属性动画实际上是针对于关键路径而不是一个键,这就意味着可以对子属性甚至是虚拟属性做动画。但是虚拟属性到底是什么呢?...但是和属性动画不同的是,对指定的图层一次只能使用一次CATransition,因此,无论你对动画的键设置什么值,过渡动画都会对它的键设置成“transition”,也就是常量kCATransition。...这就产生了一个问题,当动画开始之前和动画结束之后,被设置动画的属性将会是什么值呢?...每 个CALayer和CAAnimation实例都有自己本地时间的概念,是根据父图层/动画层级关系中的beginTime,timeOffset和 speed属性计算。
layer这样的属性,并且layer会负责view中有关图形绘制的相关操作,例如我们设置view的背景颜色和设置layer的背景颜色都是有效的,并且,设置view的背景色依然是通过layer来展示的,我们可以写如下的测试代码...2.自定义view默认layer属性的类 UIView是很多视图类的父类,根据功能不同,会分出UIImageView,UIScrollerView,UITableView等,CALayer...二、几种系统的Layer类 前边说过,和UIView相似,CALayer也很据功能衍生出许多子类,系统系统给我们可以使用的有如下几种: 1.CAEmitterLayer CoreAnimation...2.CAGradientLayer CAGradientLayer可以创建出色彩渐变的图层效果,如下: ?...4.CAReplicatorLayer CAReplicatorLayer是一个layer容器,会对其中的subLayer进行复制和属性偏移,通过它,可以创建出类似倒影的效果,也可以进行变换复制,如下:
至于动画框架,有 UIView 级别的,有功能强劲的 CALayer 级别的动画。...动画的起始状态,一般是起始位置。...这里的约束动画,是通过 NSLayoutAnchor 做得。 一般我们用的是 SnapKit 设置约束,调用也差不多。... 的 locations 位置属性,用来调整渐变区域的分布 另一个关键点是用了图层 CALayer 的遮罩 mask, 简单理解,把渐变图层全部蒙起来,只露出文本的形状,就是那几个字母的痕迹 class...LoadingLabel: UIView { let gradientLayer: CAGradientLayer = { let gradientLayer = CAGradientLayer
领取专属 10元无门槛券
手把手带您无忧上云