UI篇-Layer几个关键点补充

前言

强大的UIView是基于 CALayer实现的,它的重要性不言而喻,相信大家也都有自己的研究和理解,今天这片文章里的内容是几个关键点的补充。

CALayer 和 UIView的关系

CALayer是Core Animation的基础,UIKit 相关内容实现的基础
简单来说,View和Layer最大的区别就是View可以接受用户输入(例如触摸)而Layer不可以,Layer单独并不能呈现出任何可视的内容,必须依托于View。Layer只是几何上呈现给用户的东西,它较为轻量,通常采用Cache技术,对资源消耗也较小。

CALayer是什么?

摘自官网的一句话-Layers Provide the Basis for Drawing and Animations(Layers是绘图和动画的基础)
Layer是在3D空间中的2D平面。Layer管理的几何(例如rotate,transfrom),内容(image等),和可视属性(backgroundColor,alpha)等信息。Layer主要通过管理bitmap来维护自己的状态信息,从这一点上来说,Layer可以看作对象模型,因为他们主要用来管理数据。

Layer是基于bitmap的,它会捕获View要呈现的内容,然后cache在一个bitmap中,这个bitmap可以看作一个对象。这样每次进行操作,例如平移旋转等,只是bitmap的矩阵运算。基于Layer的动画过程如图

由于基于Layer的绘制是处理静态的Bitmap的,而bitmap的处理又是GPU所擅长的,所以它的效率要比基于View绘制的高很多,因为基于View绘制的每次都要进行drawRect的调用重新绘制。

** Layer支持继承,支持添加Sublayer,支持对sublayer进行层次调整**

常用的Layer子类

CAEmitterLayer  发射器层,用来控制粒子效果

CAGradientLayer  梯度层,颜色渐变

CAEAGLayer  用OpenGL ES绘制的层

CAReplicationLayer  用来自动复制sublayer

CAScrollLayer  用来管理可滑动的区域

CAShapeLayer   绘制立体的贝塞尔曲线

CATextLayer  可以绘制AttributeString

CATiledLayer用来管理一副可以被分割的大图

CATransformLayer    用来渲染3D layer的层次结构

管理Layer内容的几个函数

addSublayer:
insertSublayer:above:
insertSublayer:atIndex:
insertSublayer:below:
removeFromSuperlayer
replaceSublayer:with:

** anchorPoint和position**

和UIView不同,Layer主要由三个属性来设置位置(极少用Frame):

bounds -  设置大小
anchorPoint -设置锚点(锚点对后续的layer动画有很大影响,默认(0.5,0.5))
position -  锚点在superLayer中的位置

contentGravity这个属性。这个属性决定了contents如何填充。

具体分为两个方面,
方面一,位置方面具体如图


方面二,比例变换方面如图

一些实例效果

彩色环状进度条
粒子动画
CATransform3D 是不是明显发现蓝色的3D层效果更强烈一些
CAReplicatorLayer.gif
CAReplicatorLayer.gif

上图效果具体实现参考另一位作者文章

(未完待续......)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转载:http://www.jianshu.com/p/32fcadd12108 每个UIView有一个伙伴称为l...
    F麦子阅读 11,508评论 0 13
  • 每个UIView有一个伙伴称为layer,一个CALayer。UIView实际上并没有把自己画到屏幕上;它绘制本身...
    shenzhenboy阅读 8,322评论 0 17
  • >复杂的组织都是专门化的 >Catharine R. Stimpson 到目前为止,我们已经探讨过`CALayer...
    夜空下最亮的亮点阅读 4,776评论 0 2
  • 空意瑜伽,带您一起来甩肉肉了! 课时通知,2月6日,星期一,下午6:30! 并不是你身处的环境决定了你是什么样的人...
    BaBy谷子阅读 1,526评论 0 0
  • 我又看到他了。这回他站起来了,拄着拐杖,一高一低地慢慢移动。他背着黑包,手里提着两件东西,一个应该是我给的袋子。他...
    云游的牧童阅读 1,436评论 0 0

友情链接更多精彩内容