iOS CALayer的理解与简单使用

举报
HelloWorld杰少 发表于 2022/08/06 23:50:17 2022/08/06
【摘要】 1. 概述在iOS APP开发过程中,能看得见的控件都是基于UIView,比如UILabel,UIButton,UITextView等等,这些控件的属性及方法能满足大部分的开发需求,但是仍有些需求,比如圆角,阴影,边框等等,UIView是做不到的,而CALayer就可以满足这些特殊的需求了,那么CALayer又是什么呢?本文将对CALayer做一些简单的总结。 2. CALayer是什么A...

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。

image

在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
}

运行效果如下:

image

整个屏幕显示了一张照片,这样做的一个好处就是,如果背景要是设置一个全屏幕照片,则省去了添加UIImageView了。

contentsGravity & masksToBounds

image

示例如下:
image

image

contentsRect

// 单位坐标空间中的矩形,它定义了图层中应该使用的内容部分。默认值为{0, 0, 1, 1}全部显示,取值范围为0到1.
var contentsRect: CGRect

显示如下:

image

其他属性:

Layer还有很多其他的属性,比如:背景色、边框、阴影、透明度、等等,这些都是开发中大家已经用的很熟的了,这里面就不再赘述了。

4. 总结

本文简单介绍了CALayer的定义以及与UIView的关系,还介绍了一些CALayer的属性,文章略显简短,有些重要的属性及方法原理等,后续会有单独文章阐述。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。