iOS CALayer的理解与简单使用
1. 概述
在iOS APP开发过程中,能看得见的控件都是基于UIView,比如UILabel,UIButton,UITextView等等,这些控件的属性及方法能满足大部分的开发需求,但是仍有些需求,比如圆角,阴影,边框等等,UIView是做不到的,而CALayer就可以满足这些特殊的需求了,那么CALayer又是什么呢?本文将对CALayer做一些简单的总结。
2. CALayer是什么
An object that manages image-based content and allows you to perform animations on that content.
一个管理基于图像的内容并允许对该内容执行动画的对象。
说的通俗点就是CALayer能够显示具体的图像,并且还能执行动画。Layer的主要工作就是用来展示我们设置的视图,它自身也有一些可以设置的属性,比如背景色,边角框等等,另外Layer还能记录它所展示内容的位置,大小等一些几何信息。
那么Layer用来显示内容了,UIView是干什么的呢?
UIView是构建视图的基础模块,定义了所有视图共有的行为,并管理其内部所有视图的交互行为。
所以我们可以粗略的划分为:Layer是用来显示内容的,并保持内容的几何信息,View则是用来处理用户交互,事件,以及响应链。
比如下图,我们所看到的全都是Layer。
在iOS系统中,每当创建一个View的时候,便会自动创建一个Layer与View绑定,并自动将Layer的代理设置为View,我们不应改变这个关系。如果是我们手动创建的Layer,那么我们可以指定Layer的代理,并通过这个代理给Layer提供内容。
3. CALayer的简单使用
开发中,有些需求必须使用CALayer的相关属性,而有些需求可以使用UIView的,也可以使用CALayer的,但是如果使用了CALayer的属性,可能会更简洁一些。
下面看一些属性的简单使用。
contents & contentsScale
// 一个能为Layer提供内容的对象
var contents: Any?
// Layer的比例因子,避免Retina屏幕显示错误,等同于屏幕的比例因子。
var contentsScale: CGFloat
例如下面代码:
override func viewDidLoad() {
super.viewDidLoad()
self.view.layer.contents = UIImage(named: "image_0.jpg")?.cgImage
self.view.layer.contentsScale = UIScreen.main.scale
}
运行效果如下:
整个屏幕显示了一张照片,这样做的一个好处就是,如果背景要是设置一个全屏幕照片,则省去了添加UIImageView了。
contentsGravity & masksToBounds
示例如下:
contentsRect
// 单位坐标空间中的矩形,它定义了图层中应该使用的内容部分。默认值为{0, 0, 1, 1}全部显示,取值范围为0到1.
var contentsRect: CGRect
显示如下:
其他属性:
Layer还有很多其他的属性,比如:背景色、边框、阴影、透明度、等等,这些都是开发中大家已经用的很熟的了,这里面就不再赘述了。
4. 总结
本文简单介绍了CALayer的定义以及与UIView的关系,还介绍了一些CALayer的属性,文章略显简短,有些重要的属性及方法原理等,后续会有单独文章阐述。
- 点赞
- 收藏
- 关注作者
评论(0)