UIView属性alpha,hidden,opaque

如题所述

第1个回答  2022-07-17
Alpha

alpha是透明度,取浮点类型的值,取值范围从0到1.0,表示从完全透明到完全不透明 。

1、alpha会影响自己的透明度,同时也会影响subView的透明度。及其特性会被当前所有subView继承。

2、当alpha为0时,跟hidden为YES时效果一样。其值小于0.01时,接受不到事件,包括其subView,也接受不到事件。

3、alpha具有动画效果,更改alpha,默认是有动画效果的。

小知识:backgroundColor的alpha

        设置backgroundColor的alpha值只影响当前UIView的背景,并不会影响其所有subView。UIView的alpha值会影响backgroundColor最终的alpha,假设UIView的alpha为0.8,backgroundColor的alpha为0.5,那么backgroundColor最终的alpha为0.4(0.8*0.5)。

Hidden

hidden表示UIView是否隐藏,此属性为BOOL值,默认值是NO。当hidden设置为YES时:

1、当前的UIView和subView都会被隐藏,忽略subView的hidden属性。

2、当前UIView会从响应者链中移除,subView也接受不到。

3、将hidden设置为YES没有动画效果。

Opaque

        该属性为BOOL值,opaque也表示当前的UIView的不透明度。设置是否之后对于UIView的显示并没有什么影响,官方文档的意思简单点说就是opaque默认为YES,如果alpha小于1,那么应该设置opaque设置为NO。但是如果alpha不为1,opaque设置为YES,产生的后果是不可预料的。其作用在于:给绘图系统提供一个性能优化开关。如果该值为YES,那么绘图在绘制该视图的时候把整个视图当做不透明对待。这样绘图系统在执行绘图过程中会优化一些操作并提供系统性能;如果是设置为NO,绘图系统将其和其他内容平等对待,不去做优化操作。

        如果想了解opaque,需要点屏幕绘制的知识,屏幕上的每个像素点都是通过RGBA值(Red、Green、Blue三原色再配上Alpha透明度)表示的,当纹理(UIView在绘图系统中对应的表示项)出现重叠时,GPU会按照Result = Source + Destination * (1 - Source alpha)公式计算重叠部分的像素。

Result是结果RGB值,Source为处在重叠顶部纹理的RGB值,Destination为处在重叠底部纹理的RGB值。当Source的alpha为1时,绘图系统认为下面的颜色全部被遮盖住了,Result = Source,如果Source的alpha不为0,上下层颜色就会进行合成,所以opaque默认设置YES,提升绘制性能。如果开发中UIView是不透明的,opaque设置为YES, 如果opaque设置NO,那么alpha应该小于1。