一直以来都是用xib或SB设置背景半透明,今天看了看用代码设置半透明。
让一个控件半透明,通常我们第一个想到的方法就是调整控件的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:,通过这种方法就可以达到让背景成为任何颜色的半透明而且其子控件不透明。
- 在xib或者storyBoard里面对背景进行设置
如图:
xib设置.png
通过对背景颜色设置图中的Opacity滑块调整透明度,同样可以达到设置背景半透明而子控件不透明的目的。
5.使用colorWithAlphaComponent:方法
这是一个实例方法,一个UIColor的实例调用此方法后会返回一个带透明度的UIColor.使用方法如下:
UIColor *color = [UIColor blackColor];
bgView.backgroundColor = [color colorWithAlphaComponent:0.5];
将返回值设置给底层的背景颜色,也可以保证子控件不透明.