博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 设置视图半透明而子控件不透明
阅读量:6904 次
发布时间:2019-06-27

本文共 1336 字,大约阅读时间需要 4 分钟。

让一个控件半透明,通常我们第一个想到的方法就是调整控件的alpha值。当然如果你的视图上如果有其他子控件就会发现这样的方法是可能达不到你的预期,否则你应该看不到这篇文章了。

对视图直接设置alpha属性的值会导致其子控件也变得半透明,而通常我们的需求是:背景半透明而其子控件不透明。

先说解决办法:

1.用一张半透明的图片做背景。

这个方法当然可以达到要求,但是从编程初期前辈就教导我说在工程中尽量少加入资源,能不用图片的尽量不用图片(如纯色背景之类的)

2.使用colorWithWhite:alpha:方法

bgView.backgroundColor = [UIColor colorWithWhite:0.f alpha:0.5];复制代码

这也是我之前使用比较多的方法,white后面的参数表示灰度,从0-1之间表示从黑到白的变化,alpha就是你想调整的透明度。由于我做的半透明背景基色基本非黑即白,这个方法基本也够用了。缺点就是不能设置其他颜色(彩色)的半透明

3.使用colorWithRed:green:blue:alpha:方法

这其实是我重点想说的方法。为什么呢?

相信大家平时用代码给视图着色的时候,可能都用过类似 colorWithHexString:或colorWithHexColor:这样的方法,即:对UIColor类进行扩展,将16进制(如:#ffffff)的颜色字符串作为参入传入,并返回该色值对应的UIColor类型的颜色

这一层的包装使我们(起码是我)对UIColor自带的方法colorWithRed:green:blue:alpha:既熟悉又陌生,熟悉是我们无数次调用这个扩展的方法来设置颜色,其本质都是在调用它,陌生可能是因为对它太过熟悉导致我几乎忘记它还有一个alpha参数可以让我们设置半透明的背景色。而且通过这种方法就可以达到让背景成为任何颜色的半透明而且其子控件不透明。

当我发现可以用这个方法设置背景半透明而子控件不透明的时候,有点哭笑不得。那感觉就像是你突然发现你以为十分熟悉的室友竟然还有一项瞬间移动的技能。

所以我决定以后给我的UIColor扩展类增加一个方法: colorWithHexColor:alpha:(怎么添加边笑边流泪的表情...)

4. 在xib或者storyBoard里面对背景进行设置

如图:

半透明背景xib设置.png

半透明背景xib设置.png

通过对背景颜色设置图中的Opacity滑块调整透明度,同样可以达到设置背景半透明而子控件不透明的目的。

5.使用colorWithAlphaComponent:方法

在博友的提醒下,发现还有一个方法,现在补充上来. 和前面说的几个设置背景色的方法不太一样的是,这是一个实例方法,一个UIColor的实例调用此方法后会返回一个带透明度的UIColor.使用方法如下:

UIColor *color = [UIColor blackColor];bgView.backgroundColor = [color colorWithAlphaComponent:0.5];复制代码

经测试,将返回值设置给底层的背景颜色,也可以保证子控件不透明.

转载地址:http://iwmdl.baihongyu.com/

你可能感兴趣的文章
HTML简介
查看>>
批量修改页面标签的属性
查看>>
oracle中日期格式的转换
查看>>
CISCO路由器端口故障状态及解决
查看>>
同步传输与异步传输
查看>>
我的2014--新的开始,新的征程,加油!
查看>>
JS图片无缝、平滑滚动代码,多用于推广页面
查看>>
排序算法(一)
查看>>
使用jconsole监控tomcat性能情况
查看>>
ligerui grid行编辑示例
查看>>
linux安装或移植zencart系统
查看>>
动态权限
查看>>
MySQL 主从复制
查看>>
LayoutBuilder 构建一个窗口大小的widget树。 并可以获取widget 的狂宽高
查看>>
Python OpenCV学习笔记之:图像金字塔
查看>>
3月上旬中国数据域名总量跌至22.8万个 增长略有波动
查看>>
9月15日全球域名商(国际域名)解析量排行榜TOP20
查看>>
12月初全球域名商解析新增保有量15强:万网称王
查看>>
3月末全球域名商域名解析量23强:爱名网跌至第十七
查看>>
web报表开发FineReport教程之父子格设置
查看>>