Swift-技巧(五)设置圆角的代码
摘要
实现控件圆角的代码时,会不假思索的写
cornerRadius
和masksToBounds
,因为搜索得到的设置圆角的代码就是这样。今天突发奇想,为什么要写masksToBounds
?
打个比方,设置一个按钮的圆角是 5,我会立马写这两行代码:
btn.layer.cornerRadius = 5
btn.layer.masksToBounds = true
呈现的效果上,是没有任何问题的。但是为什么要设置 masksToBounds
为 true
呢?能不写吗?
带着问题,来看一下 masksToBounds
是做什么用的。
masksToBounds
看官方解释说 masksToBounds
指示一个可以设置的标识,指定在当前 layer
层的 bounds
区域中的所有子 layer
层是否是被裁剪的。我的理解就是,若设置为 true
那么在这个 layer
层中的子 layer
层超出 bounds
部分就会被裁剪掉。
问题来了,它是怎么实现裁剪的?继续看苹果官网的解释,巴拉巴拉...看我的理解是这样的:
先上大白话总结,就是如果这个属性设置为 true,那么它就会生成一个 mask 蒙板,在 bounds 区域内的值为 1,超出的部分就是 0。之后呢,就是把mask 蒙板给盖在 layer
上,混合渲染,是 1 的部分就显示原来的,是 0 的部分就空白,这就实现了裁剪效果,因为 mask 包含了设置的圆角,所以在处理的时候,也会把圆角给考虑进去。
接下来看一下 cornerRadius
是做什么用的。
cornerRadius
官方解释说设置 layer
的 background
四个角处理为圆角的半径。
接下来它也说明 cornerRadius
限制,就是仅仅作用到 background
(背景) 和边框,layer
中的 contents
不受影响,比如放在它上面的 image
。
如果想让 cornerRadius
的效果也作用到 contents
上时,就需要设置 masksToBounds
为 true。
总结
在显示图片的时候,我也确实要设置 masksToBounds
为 true
。但是现在看下来,如果要用 masksToBounds
就要明确想要有圆角的 content
是属于 layer
的 contents
吗? 这个 content
超出了设置圆角后的 bounds
吗?
如果两个问题的答案都是 true
。那必须就要设置 masksToBounds
为 true
。
那么那些算是属于 layer
的 contents
?等我验证之后给你详细说
题外话
时间仓促,说的东西可能不全面,在你查看的过程中遇到什么问题,评论区给我留言,我会尽快回复
Swift-技巧(五)设置圆角的代码的更多相关文章
- iOS之用xib给控件设置圆角、边框效果
xib中为各种控件设置圆角 通过代码的方式设置 @interface ViewController () @property (weak, nonatomic) IBOutlet UIView *my ...
- iOS之分别使用代码和storyboard、xib为控件设置圆角(以按钮为例)
首先我们看一下代码是如何给按钮设置圆角的: 我们再来看看如何在storyboard或xib中给按钮设置圆角: 1.在storyboard或xib中添加按钮后,设置标题和背景色,做好约束: 2.点击 S ...
- Swift - 给UICollectionview设置组背景和圆角
钟情圆角怎么办 最近由于我们的UI钟情于圆角搞得我很方,各种圆角渐变,于是就有了下面这篇给UICollection组设置圆角和背景色的诞生,不知道在我们平时有没有遇到这样子的一些需求,就是按照每一组给 ...
- iOS设置圆角的方法及指定圆角的位置
在iOS开发中,我们经常会遇到设置圆角的问题, 以下是几种设置圆角的方法: 第一种方法: 通过设置layer的属性 代码: UIImageView *imageView = [[UIImageView ...
- 提高PHP性能的实用方法+40个技巧优化您的PHP代码
1.用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的"函数" ...
- WPF 自定义TextBox带水印控件,可设置圆角
一.简单设置水印TextBox控件,废话不多说看代码: <TextBox TextWrapping="Wrap" Margin="10" Height=& ...
- jQuery操作复选框checkbox技巧总结 ---- 设置选中、取消选中、获取被选中的值、判断是否选中等
转载:https://blog.csdn.net/chenchunlin526/article/details/77448168 jQuery操作复选框checkbox技巧总结 --- 设置选中.取消 ...
- iOS设置圆角的四种方法
小小圆角问题,正常情况下,我们不需要过多关心,但当屏幕内比较多的时候,还是有必要了解下性能问题的 一.设置CALayer的cornerRadius 这是最常用的,也是最简单的. cornerRadiu ...
- IOS 设置圆角用户头像
在App中有一个常见的功能,从系统相册或者打开照相机得到一张图片,然后作为用户的头像.从相册中选取的图片明明都是矩形的图片,但是展示到界面上却变成圆形图片,这个神奇的效果是如何实现的呢? 请大家跟着下 ...
随机推荐
- 如何从阿里云Code升级至云效Codeup
如果你还在使用阿里云Code,不防看看如何从阿里云Code升级至云效Codeup,云效代码管理Codeup是阿里云出品的一款企业级代码管理平台,提供代码托管.代码评审.代码扫描.质量检测等功能,全方位 ...
- iptables配置操作
1.防火墙添加配置规则(正向) vim /etc/sysconfig/iptables 指定服务器的ip访问内访问某个端口 -A INPUT -p tcp -m iprange --src-range ...
- NOIP模拟77
前言 感觉最近太飘了,这次考试是挺好的一次打击(好像也不算是). 犯了一个智障错误(双向边一倍数组 100pts->30pts)别的就.. T1 最大或 解题思路 一开始我以为是一个找规律,然而 ...
- AT3950 [AGC022E] Median Replace
题目传送门 Description 有一个长度为 \(n\) 的 \(01\) 串,里面有一些还没有确定,我们标记为 ? .可以进行若干次操作,每次操作可以把三个相邻的数替换成它们的中位数.问有多少种 ...
- 洛谷2543AHOI2005]航线规划 (树剖+线段树+割边思路)
这个题的思路还是比较巧妙的. 首先,我们发现操作只有删除和询问两种,而删除并不好维护连通性和割边之类的信息. 所以我们不妨像WC2006水管局长那样,将询问离线,然后把操作转化成加边和询问. 然后,我 ...
- 在IDEA中创建SpringBoot项目01
1.选择创建项目 2.填写项目信息 3. 4. 5.Finish后会下载,之后生成目录结构: 6.在自己的包目录结构下添加了Controllr和Entiy测试项目: Controller: 1 pac ...
- vue3双向数据绑定原理_demo
<!DOCTYPE html> <head> <meta charset="UTF-8" /> <meta name="view ...
- Wireshark 过滤器的使用
符号 例子 = = tcp.port = = 80 过滤出来TCP包含80端口的数据包 != ip.src != 127.0.0.1 ip的原地址不是127.0.0.1过滤出来 > lp.len ...
- Beta-技术规格说明书
项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 团队项目-计划-功能规格说明书 一.架构与技术栈 1.整体架构 本项目的整体架构如上图所示.下面我们将对涉及 ...
- Prometheus的单机部署
Prometheus的单机部署 一.什么是Prometheus 二.Prometheus的特性 三.支持的指标类型 1.Counter 计数器 2.Gauge 仪表盘 3.Histogram 直方图 ...