透明度与图层混合相关,影响到图片绘制的效率。

hidden

此属性为 BOOL 值,用来表示 UIView 是否隐藏。关于隐藏大家都知道就是让 UIView 不显示而已,但是需要注意的是:

  • 当前 UIView 的所有 subview 也会被隐藏,忽略 subview 的 hidden属性。UIView 中的 subview 就相当于 UIView 的死忠小弟,老大干什么我们就跟着老大,同进同退,生死与共!
  • 当前 UIView 也会从响应链中移除。你想你都不显示了,就不用在响应链中接受事件了。

alpha

此属性为浮点类型的值,取值范围从 0.0 到 1.0,表示从完全透明到完全不透明,其特性有:

  • 当前 UIView 的 alpha 值会被其所有 subview 继承。因此,alpha 值会影响到 UIView 跟其所有 subview。
  • alpha 具有动画效果。当 alpha 为 0 时,跟 hidden 为 YES 时效果一样,但是 alpha 主要用于实现隐藏的动画效果,在动画块中将 hidden 设置为 YES 没有动画效果。

backgroundColor 的 alpha(Clear Color)

此属性为 UIColor 值,而 UIColor 可以设置 alpha 的值,其特性有:

  • 设置 backgroundColor 的 alpha 值只影响当前 UIView 的背景,并不会影响其所有 subview。这点是同 alpha 的区别,Clear Color 就是 backgroundColor 的 alpha 为 1.0。
  • alpha 值会影响 backgroundColor 最终的 alpha。假设 UIView 的 alpha 为 0.5,backgroundColor 的 alpha 为 0.5,那么 backgroundColor 最终的 alpha 为 0.25(0.5 乘以 0.5)。

opaque

此属性为 BOOL 值。要搞清楚这个属性的作用,就要先了解绘图系统的一些原理:屏幕上的每个像素点都是通过 RGBA 值(Red、Green、Blue 三原色再配上 Alpha 透明度)表示的,当纹理(UIView 在绘图系统中对应的表示项)出现重叠时,GPU 会按照下面的公式计算重叠部分的像素(这就是所谓的“合成”):

Result = Source + Destination * (1 - SourceAlpha)

Result 是结果 RGB 值,Source 为处在重叠顶部纹理的 RGB 值,Destination 为处在重叠底部纹理的 RGB 值。通过公式发现:当 SourceAlpha 为 1 时,绘图系统认为下面的纹理全部被遮盖住了,Result 等于 Source,直接省去了计算!尤其在重叠的层数比较多的时候,完全不同考虑底下有多少层,直接用当前层的数据显示即可,这样大大节省了 GPU 的工作量,提高了效率。(多像现在一些“美化墙”,不管后面的环境多破烂,“美化墙”直接遮盖住了,什么都看不到,不用整治改进,省心省力)。更详细的可以读下 objc.io 中<绘制像素到屏幕上>这篇文章。

那什么时候 SourceAlpha 为 1 呢?这时候就是 opaque 上场的时候啦!当 opaque 为 YES 时,SourceAlpha 为 1。opaque 就是绘图系统向 UIView 开放的一个性能开关,开发者根据当前 UIView 的情况(这些是绘图系统不知道的,所以绘图系统也无法优化),将 opaque 设置为 YES,绘图系统会根据此值进行优化。所以,如果在开发时某 UIView 是不透明的,就将 opaque 设置为 YES,能优化显示效率。

需要注意的是:

  1. 当 UIView 的 opaque 为 YES 时,其 alpha 必须为 1.0,这样才符合 opaque 为 YES 的场景。如果 alpha 不为 1.0,最终的结果将是不可预料的(unpredictable)。
  2. opaque 只对 UIView 及其 subclass 生效,对系统提供的类(像UIButton,UILabel)是没有效果的。

参考

http://joeshang.github.io/2014/12/19/2014-12-19-transparency-property-diffence-in-uiview/

This property provides a hint to the drawing system as to how it should treat the view.

If set to YES, the drawing system treats the view as fully opaque, which allows the drawing system to optimize some drawing operations and improve performance.

If set to NO, the drawing system composites the view normally with other content.

The default value of this property is YES.

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.

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

UIView 中 hidden、alpha、clear color 与 opaque 的区别的更多相关文章

  1. iOS - UIView属性hidden, opaque, alpha, opacity的区别

    iOS开发-之UIView属性hidden, opaque, alpha, opacity的区别 一.alpha 液晶显示器是由一个个的像素点组成的,每个像素点都可以显示一个由RGBA颜色空间组成的一 ...

  2. alpha和color key

    一.alpha 1.透明度,一般取值0-255 2.Alpha 通道:    Alpha 通道是为保存选择区域而专门设计的通道.在生成一个图像文件时,并不必须产生 Alpha 通道.通常它是由人们在图 ...

  3. mixer中动态Alpha通道处理案例

       本案例处理的是RGB+a,每个色彩的采样为10位位宽. 1.在Mixer IP中打开Alpha Blending Enable 和Alpha Input Stream Enable.这样在Blo ...

  4. css中filter:alpha透明度使用

    css中filter:alpha透明度使用    使用filter可以设置透明度,filter:alpha在IE下是没有问题的,要支持firefox就需要使用-moz-opacity,下面有个不错的示 ...

  5. UIView 中 frame, bounds, center 属性的关系

    最近一直在学 iOS 开发,所以专门创建了这样一个类别,将自己学习中的一些问题整理,记录下来.由于自己是初学者,所以所写的文章非常基础,写这个类别一是为了给自己留下存 档,二是为了给和我有同样问题的初 ...

  6. 【IE6的疯狂之二】IE6中PNG Alpha透明(全集)

    ie7,fireofx,opera,及至webkit内核的chrome ,safari….. 这些浏览器均支持png的Alpha透明. 很多人说IE6不支持PNG透明,其实IE支持100%透明的PNG ...

  7. 页面中去除浮动 clear:both

    今天写代码发现一个很奇怪的问题,发现上面的div加浮动(不管是否包含div)以后对下面div的浮动有所影响,通过去除浮动,搞定: 只需要在受影响的div中的样式中,加入clear:both即可

  8. 去除图像中的alpha通道或透明度

    自从appstore提交app改变后,虽然提交的流程还是和原来一样,但是相比以前还是有很大的改动,本来就不太喜欢 English,改版之后很多东西都变了,开发一个app就已经够他妈的蛋疼啦,上传一个a ...

  9. CSS中float和Clear的使用

    CSS中float和Clear的使用 本文和大家重点讨论一下CSS中Float和Clear属性的使用,一个float对象可以居左或居右,一个设置为float的对象,将根据设置的方向,左移或右移到其父容 ...

随机推荐

  1. <深入理解JavaScript>学习笔记(3)_全面解析Module模式

    简介 Module模式是JavaScript编程中一个非常通用的模式,一般情况下,大家都知道基本用法,本文尝试着给大家更多该模式的高级使用方式. 首先我们来看看Module模式的基本特征: 模块化,可 ...

  2. HDU 2639(01背包第K大)

    http://acm.hdu.edu.cn/showproblem.php?pid=2639 http://blog.csdn.net/lulipeng_cpp/article/details/758 ...

  3. Spring学习(一)---依赖注入和控制反转

    Spring Spring是一个从实际开发中抽出来的框架,因此它完成了大量开发中的通用步骤,留给开发者的仅仅是与特定应用相关的部分,从而大大提高了企业应用的开发效率. Spring为企业应用的开发提供 ...

  4. Angular中父子组件双向绑定传值

    下面为大家展示一个较为简单的ng父子组件双向绑定传值,下面是父组件页面 这个页面的大概功能就是父组件(红色)通过输入框输入内容反映到子组件上进行展示,并且进行了投影, 子组件(橙黄色)通过Input输 ...

  5. 常用SEO优化

  6. react context toggleButton demo

    //toggleButton demo: //code: //1.Appb.js: import React from 'react'; import {ThemeContext, themes} f ...

  7. Centos7 下安装Apache2 + MySQL + PHP7

    Apache 1.安装Apache yum install httpd 2.设置服务器开机自动启动Apache systemctl enable httpd.service 若要验证是否自动启动可在重 ...

  8. [算法练习]Reverse Integer

    题目说明: Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return –321   ...

  9. LeetCode 1. Two Sum (JavaScript)

    1. Two Sum Given an array of integers, return indices of the two numbers such that they add up to a ...

  10. php下载远程大文件(获取远程文件大小)

    function download_file($url) { // $url = http://192.168.8.95/vm/download_file?downurl=http://192.168 ...