美文网首页iOS收藏我的iOSiOS开发记录
iOS 设置视图半透明而子控件不透明

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

作者: CoderAO | 来源:发表于2015-05-28 12:14 被阅读29161次

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

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

    • 5.使用colorWithAlphaComponent:方法

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

    UIColor *color = [UIColor blackColor];
    bgView.backgroundColor = [color colorWithAlphaComponent:0.5];
    

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

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

    相关文章

      网友评论

      • 沙漠棕榈:楼主,我的上层背景view是半透明的,子视图设置的不透明,为什么 背景View下层的视图颜色会透视到子视图上呢?而且还遮挡子视图的内容了。 查看过图层关系,背景view在上层。不知楼主有没有遇到过这种情况。
      • 我的发:博主你的解决方法很全面都非常有用,还有一个关键问题就是为什么直接改变父视图透明度子视图会跟着改变呢?
        CoderJackySong:@softlipa 这个问题可以参考我写的关于tintColor的那篇文章。😬😬
      • 重识:写的很好,加油!
      • 025a888571fb:错,那种感觉明明是发现你以为熟悉的室友居然在吃翔:smirk:
      • 王_胖胖:这个都是颜色,如果背景是一张图片呢
      • ChardXu:如果是Imageview 半透明,子视图不透明,这个方法试了不行啊,怎么办?
      • ea0d12efff68:完犊子,都不行!!!!!
      • Vincent_zhou:博主,你好!我在storyboard中创建的View,View上面是Label。可是使用你说的几种方法设置透明度都不行,只会显示灰色。请问有上面解决办法吗!谢谢!
        CoderAO:@Vincent_zhou 应该是在使用过程中由于粗心等问题出错了,你可以叫同事帮你核验一下.
      • _nameless:为什么我试了所有方法都不行
      • 小凡凡520:good mark
      • 今夜子辰:多谢,找了好久
      • 简教练:非常感谢,
      • GloryMan:感谢 :blush:
      • CoderAO:@斯卡 谢谢提醒~ :kissing_closed_eyes: 这个方法我还真没用过,稍后测试一下然后更新到我的文章里 :blush:
      • 斯卡:还有个设置透明度,而不改变子view的透明度的方法,- (UIColor *)colorWithAlphaComponent:(CGFloat)alpha;
        Pusswzy:@斯卡 这个方法不可以把

      本文标题:iOS 设置视图半透明而子控件不透明

      本文链接:https://www.haomeiwen.com/subject/pqbrqttx.html