背景色默认值引出的一系列问题

刚看到代码中有大量的xx.backgroundColor = [UIColor clearColor];

(1)很好奇,默认的背景色是什么值?

官方给出的:默认为nil,此时背景是透明的。然后clearColor的备注也写明了:“0.0 white, 0.0 alpha”(白色,但alpha为0),所以我感觉代码中设置clearColor的代码可以去掉,除非此举是为了reset背景色。

(2)结束了这个问题后,想到了UIView有个属性是opaque,如果此属性设置为YES,也就是不透明,但是默认背景色是透明的,那。。。。会发生什么?

opaque属性默认为YES,这点自己没有理解透彻,如果是YES,那为什么叠加的View会完全被看到呢?跟背景色的默认值是不是冲突了呢?翻看官方文档后发现:

An opaque view is expected to fill its bounds with entirely opaque content—that is, the content should have an alpha value of 1.0. If the view is opaque and either does not fill its bounds or contains wholly or partially transparent content, the results are unpredictable. You should always set the value of this property to NO if the view is fully or partially transparent.

opaque为YES的视图的内容区域必须不透明:内容的alpha值需要为1。如果设置了opaque属性为YES,但内容中有部分透明或者全部透明,结果会是无法预期的。这样最好还是要设置为NO。

You only need to set a value for the opaque property for subclasses of UIView that draw their own content using the drawRect: method. The opaque property has no effect for system provided classes such as UIButton, UILabel, UITableViewCell, etc.

opaque属性只需要对继承自UIView的、使用drawRect:进行绘制内容的类(自定义类)中使用,对系统提供的类,例如UIButtonUILabelUITableViewCell,等,使用此属性,是没有效果的。

这下明白了,这个属性更多是为drawRect:方法绘制出内容的对象准备的,如果更多的是对系统提供控件的使用,一般情况下我们用不到。

然后我又看到了一篇相关文章,顺便延伸一下:

原文地址:http://blog.csdn.net/wzzvictory/article/details/10076323

文章讲述了hidden、alpha、opaque的区别,其中说到了:

alpha为0和hidden为YES时,当前UIView会从响应者链中移除,而响应者链中的下一个会成为第一响应者,这一点比较有用

作者还提到了,alpha设置为0和hidden为YES有什么区别,我知道的是,在Windows Phone开发中,前者是需要CPU或GPU绘制的,而后者是不需要的,在iOS上是否如此,也希望大家不吝赐教!

时间: 2024-11-02 23:36:21

背景色默认值引出的一系列问题的相关文章

SQL 自定义函数(Function)——参数默认值

sql server 自定义函数分为三种类型:标量函数(Scalar Function).内嵌表值函数(Inline Function).多声明表值函数(Multi-Statement Function) 标量函数:标量函数是对单一值操作,返回单一值. 内嵌表值函数:内嵌表值函数的功能相当于一个参数化的视图.它返回的是一个表,内联表值型函数没有由BEGIN-END 语句括起来的函数体. 多声明表值函数:它的返回值是一个表,但它和标量型函数一样有一个用BEGIN-END 语句括起来的函数体,返回值

<input type="text"/>未输入时属性value的默认值--js学习之路

在百度ife刷题是自己的一个错误引发了我对<input type="text"/>的学习. 先贴代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>example</title> </head> <body> <label for="weather_input"

mysql修改表中某个字段的默认值

Mysql中用SQL增加.删除字段,修改字段名.字段类型.注释,调整字段顺序总结 在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或字段的注释,把同字段属性调整到一块儿.这些操作可以在phpmyadmin或者别的mysql管理工具中完成,但是我们有时为了更方便的管理,会选择写sql语句来实现. 1.增加一个字段  代码如下 复制代码 //增加一个字段,默认为空alter table user add COLUMN new1 VA

SQL Server 自定义函数(Function)——参数默认值

原文:SQL Server 自定义函数(Function)--参数默认值 sql server 自定义函数分为三种类型:标量函数(Scalar Function).内嵌表值函数(Inline Function).多声明表值函数(Multi-Statement Function) 标量函数:标量函数是对单一值操作,返回单一值. 内嵌表值函数:内嵌表值函数的功能相当于一个参数化的视图.它返回的是一个表,内联表值型函数没有由BEGIN-END 语句括起来的函数体. 多声明表值函数:它的返回值是一个表,

解决:mysql timestamp默认值0000-00-00 00:00:00 报错

一. 问题的引出 我们在用mysql5.7创建表时,如果把timestamp(时间戳)的默认值设置为0000-00-00 00:00:00 的形式,将会产生一条报错: `RepaymentDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '回款日期', 报错信息如下: [Err] 1067 - Invalid default value for 'RepaymentDate' 二. 找出原因 这个问题和mysql中sql

如何使用智能默认值来减少认知负担

作者:Nick Babich 翻译 :吴祺深 欢迎访问网易云社区,了解更多网易技术产品运营经验. 如果你问UX设计师们他们的工作目标是什么,他们可能会说,他们的目标是让用户的生活变得简便.当用户体验设计师设计一款产品,他们会尽最大努力提供能够实现最终结果的最直接的操作路径.虽然这个目标可能听起来很简单,但在现实生活中存在着许多妨碍用户达成目的的障碍.其中一个便让用户停下来思考接下来该如何进行的东西. Steve Krug有句名言:"不要让我思考".如果你想听从他的建议,就需要专注于减少

angularjs下拉列表设置一个默认值

angularjs环境中,下拉列表html代码如下: 下拉列表的数据源结构大约如下: 现在,我们想在页面的初始化或者一个用户Click事件中,为这个下拉列表设置一个默认值. 方法如下: $scope.Trans_Type =1; //2,3,4,..... 当我们执行时,发现它并没有得到预期的效果,反而它为下拉列表添加多一项空值项: 明明Type值是数字1,2,3或4等. 经过一系列测试,如果绑定一个字符串作为下拉列表的值时,它能正常设值并绑定,所以: 把数据转换为字符串. 以上我们是静态指定,

spring @Value 设置默认值

@Value 的作用不用说 大家都知道 注解模式下 读取配置文件 注入属性值 /** * MQ地址 */ @Value("${NamesrvAddr}") private String namesrvAddr;   上面的是一个标着的 @Value 注解 如果配置文件中没有设置 NamesrvAddr Spring 在启动的时候讲报错. 设置默认值很简单 @Value("${NamesrvAddr:192.168.0.1}") private String name

EF Core1.0 CodeFirst为Modell设置默认值!

当我们使用CodeFirst时,有时候需要设置默认值! 如下 public int Delete { get; set; } = 0; public string AdminName {get; set;} = "admin"; public bool CacheDbResults { get; set; } = true;