iOS 设置视图半透明而子控件不透明

转载 2015年11月20日 18:44:23

让一个控件半透明,通常我们第一个想到的方法就是调整控件的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];

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

最后,这篇文章的目的主要是感慨一下(编程)生活中被忽略的小细节, 请自行脑补边笑边流泪的表情...

设置视图半透明而子控件不透明

需求:背景半透明,子控件不透明 方法: 1.用一张半透明的图片做背景。 这个方法当然可以达到要求,但在工程中尽量少加入资源,能不用图片的尽量不用图片(如纯色背景之类的) 2.使用colorW...
  • u010070526
  • u010070526
  • 2016年02月29日 15:32
  • 772

iOS 设置父视图半透明,子视图不透明

ios  需求: 设置父视图半透明,子视图不透明: 通常我们设置一个view的透明  view.alpha = 0.5;     这时  view上面有子视图 也会变的半透明了。 这时,通过设置 vi...
  • AD_118
  • AD_118
  • 2015年03月25日 10:37
  • 2418

ios设置父视图半透明而子视图(子控件)不透明

自己能够做到的实现这样的效果,现在大概有五种方法。 看到要实现这样的效果,我们每个人最先想到的应该是调整那个视图的alpha值(0~1)。 但是如果你的这个视图上还有个要正常显示的子控件的话,你这...
  • lurenjia_KB
  • lurenjia_KB
  • 2018年01月10日 10:11
  • 188

iOS view中半透明,但是子控件透明度不受影响

_scoreView.backgroundColor=[UIColor colorWithRed:0 green:0 blue:0 alpha:0.6];
  • woshidaniu
  • woshidaniu
  • 2016年03月02日 02:01
  • 1349

QML父窗口半透明情况下子窗口不透明

QML的父元素opacity值会被继承,而color不会。故可以在父窗口使用8位color代码,前两位是alphar透明值。 Rectangle{ id:waitingRec ...
  • zpc10105
  • zpc10105
  • 2014年03月13日 16:59
  • 1505

iOS开发如何在一个透明视图上添加不透明的子控件

相信很多同学都会遇到过这个问题, 当我们弹出一个半透明的遮盖层时, 又想在遮盖层上加一些子视图, 这个时候如果你的遮盖层设置了alpha属性,  你会惊讶的发现, 加载遮盖层上的所有子控件都是透明了,...
  • wangjunling888
  • wangjunling888
  • 2016年06月06日 01:11
  • 3753

父View半透明,子View不透明

今天再封一个confirm控件的时候,出现了一个小的bug,是这样的:有一个view,这个父View上增加了一个View,父View的透明度我设置了alpha=0.6f,但是子View我没有设置,理想...
  • baidu_31683691
  • baidu_31683691
  • 2016年10月20日 16:28
  • 961

iOS 导航栏navigation的translucent属性 影响半透明状态

self.navigationController.navigationBar.translucent = NO; 当translucent设置为NO时,效果是这样的: self.na...
  • worldzhy
  • worldzhy
  • 2015年03月14日 11:09
  • 38551

ios 设置视图透明,子控件不透明

1、使用背景图片。 2、使用colorWithAlphaComponent:方法UIColor *color = [UIColor blackColor]; bgView.backgroundCol...
  • Seven_May
  • Seven_May
  • 2016年03月11日 11:17
  • 256

Winform窗体半透明,控件不透明,及皮肤美化效果

先看效果图:        其实网上实现窗体半透明,控件不透明的方法很多,能用微软的API做出效果固然很好,然而其实现方法上有点点复杂,我个人没怎么去深究这个问题,因为我只想实现这个效果而已,选...
  • wanlong360599336
  • wanlong360599336
  • 2012年05月10日 13:23
  • 9895
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS 设置视图半透明而子控件不透明
举报原因:
原因补充:

(最多只允许输入30个字)