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

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Web行业观察

简单了解下无障碍设计模式

一款设计良好的产品可供所有能力的用户使用,包括视力低下、失明、听力障碍、认知障碍或运动障碍的用户。改进产品的无障碍功能可以增强所有用户的可用性,这是非常值得做的...

2964
来自专栏数据小魔方

条件格式制作条形数据组图

今天跟大家分享用条件格式制作条形数据组图! ▽▼▽ 记得之前有一期跟大家分享过条件格式图表的制作方法,今天所要讲的案例,方法是一样的,只是通过多个条形图叠加及排...

3706
来自专栏Coco的专栏

【BOOM】一款有趣的Javascript动画效果

1825
来自专栏james大数据架构

Android中关于dip和px以及转换的总结

我们在页面布局的时候,经常会设置容器的长度,但是到底该使用哪个作为长度的单位而懊恼。在Android中支持的描述大小区域的类型有以下几种: px(pixels)...

1895
来自专栏转载gongluck的CSDN博客

GDI透明贴图

网上下载的图片,有一些会有水印。水印的实现可以用透明贴图来做。透明贴图就是让两张图片合并的时候,重叠的部分中使一些颜色不显示,从而达到透明的效果。 如果用GDI...

4336
来自专栏拂晓风起

【Fanvas技术解密】HTML5 canvas实现脏区重绘

1932
来自专栏搞前端的李蚊子

基于Echarts4.0实现旭日图

昨天Echarts4.0正式发布,随着4.0而来的是一系列的更新,挑几个主要的简单说明: 1.展示方面通过增量渲染技术(4.0+)ECharts 能够展现千万级...

5437
来自专栏Material Design组件

Material Design — App bars: topApp bars: top

1986
来自专栏CDA数据分析师

【图表大师二】 纯Excel图表制作高仿真决策仪表盘

一、什么是仪表盘 仪表盘(guage,speedometer,dial chart,dashboard),是模仿汽车速度表的一种图表,常用来反映预算完成...

2647
来自专栏非著名程序员

Android中图片大小和屏幕密度的关系讲解

Android手机适配是非常让人头疼的一件事,尤其是图片,android为了做到是适配提供了很多文件夹来存放不同大小的图片,比如:drawable-ldpi、d...

2076

扫码关注云+社区

领取腾讯云代金券