CALayer 简介

简介: 概念CALayer 是数据 QuartzCore 框架里面的 、相对于 UIKit 框架 更于底层、 其主要功能是 负责显示视图和动画、CALayer和UIView 在除了能响应事件上 功能 是一致的、 不过因为其 更加底层 所以 CALayer 有一些接口、 UIView 里面没有。

概念

CALayer 是数据 QuartzCore 框架里面的 、相对于 UIKit 框架 更于底层、 其主要功能是 负责显示视图和动画、CALayer和UIView 在除了能响应事件上 功能 是一致的、 不过因为其 更加底层 所以 CALayer 有一些接口、 UIView 里面没有。

动画

有时候我们可以直接通过操作CALayer 去修改视图。但是要注意 隐式动画的发生,CAlayer有对应的 类方法 可以去把隐式动画关闭。

[CATransaction setDisableActions:YES];

我们看到的动画 、实际上在运动的是 CALayer 在动,UIView 并没有参加。

因为CI层操作的是CA层. CGImageRef、CGColorRef两种数据类型是定义在CoreGraphics框架中的.

UIColor、UIImage是定义在UIKit框架中的。

  • 什么是隐式动画?

当对非Root Layer的部分属性进行修改时,默认会自动产生一些动画效果

而这些属性称为Animatable Properties(可动画属性)

在CALayer.h中属性被Animatable修饰的就是会可动画的

Framework

QuartzCore框架和CoreGraphics框架是可以跨平台使用的,在iOS和Mac OS X上都能使用

但是UIKit只能在iOS中使用

• 为了保证可移植性,QuartzCore不能使用UIImage、UIColor,只能使用CGImageRef、CGColorRef

• 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮、一个文本标签、一个文本输入框、一个图标等等,这些都是UIView

• 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层

• 在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层

• 当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView的显示

• 换句话说,UIView本身不具备显示的功能,是它内部的层才有显示功能

因为CALayer 是一种更轻量级别的 视图、所以如果不需要响应点击事件的时候 。可以直接使用其去显示即可以提升性能。

@property 简介


•宽度和高度

@property CGRect bounds;  

•位置(默认指中点,具体由anchorPoint决定)

@property CGPoint position; 

•锚点(x,y的范围都是0-1),决定了position的含义

@property CGPoint anchorPoint; 

•背景颜色(CGColorRef类型)

@property CGColorRef backgroundColor; 

•形变属性

@property CATransform3D transform; 

•边框颜色(CGColorRef类型)

@property CGColorRef borderColor; 

•边框宽度

@property CGFloat borderWidth; 

•圆角半径

@property CGFloat cornerRadius; 

•内容(比如设置为图片CGImageRef)

@property(retain) id contents; 

•阴影颜色

@property CGColorRef shadowColor; 

•阴影不透明(0.0 ~ 1.0) 

@property float shadowOpacity; 

•阴影偏移位置

@property CGSize shadowOffset; 

•@property CGPoint position; 

用来设置CALayer在父层中的位置

以父层的左上角为原点(0, 0)

•@property CGPoint anchorPoint; 

称为“定位点”、“锚点”

决定着CALayer身上的哪个点会在position属性所指的位置

以自己的左上角为原点(0, 0)

它的x、y取值范围都是0~1,默认值为(0.5, 0.5)

参考资料

Apple Layer
Animatable Properties

最后

希望此篇文章对您有所帮助,如有不对的地方,希望大家能留言指出纠正。
谢谢!!!!!
学习的路上,与君共勉!!!

本文原创作者:Jersey. 欢迎转载,请注明出处和本文链接

目录
相关文章
|
Linux 开发者
交叉编译工具链的下载与安装
交叉编译工具链的下载与安装
2990 1
修改了node_modules的文件打包后不生效
修改了node_modules的文件打包后不生效
1807 1
|
Java Maven Android开发
安卓项目使用阿里云镜像加速构建过程
安卓项目使用阿里云镜像加速构建过程
3847 0
|
JavaScript 前端开发 小程序
js两个日期比较相差多少天实例
js两个日期比较相差多少天实例
423 0
|
JavaScript
Vue 获取当前日期(时间,格式为YYYY-MM-DD HH:mm:ss)
Vue 获取当前日期(时间,格式为YYYY-MM-DD HH:mm:ss)
1634 0
|
JavaScript
vue中props中值未监听
vue中props中值未监听
126 0
|
1天前
|
存储 JavaScript 前端开发
JavaScript基础
本节讲解JavaScript基础核心知识:涵盖值类型与引用类型区别、typeof检测类型及局限性、===与==差异及应用场景、内置函数与对象、原型链五规则、属性查找机制、instanceof原理,以及this指向和箭头函数中this的绑定时机。重点突出类型判断、原型继承与this机制,助力深入理解JS面向对象机制。(238字)
|
2天前
|
安全 数据可视化 网络安全
安全无小事|阿里云先知众测,为企业筑牢防线
专为企业打造的漏洞信息收集平台
1303 2
|
3天前
|
云安全 人工智能
2025,阿里云安全的“年度报告”
拥抱AI时代,阿里云安全为你护航~
1447 2
|
1天前
|
人工智能 自然语言处理 API
n8n:流程自动化、智能化利器
流程自动化助你在重复的业务流程中节省时间,可通过自然语言直接创建工作流啦。
324 3
n8n:流程自动化、智能化利器