讓一個控件半透明,通常我們第一個想到的方法就是調整控件的alpha值胚委。當然如果你的視圖上如果有其他子控件就會發(fā)現(xiàn)這樣的方法是可能達不到你的預期竹椒,否則你應該看不到這篇文章了。
對視圖直接設置alpha屬性的值會導致其子控件也變得半透明膝晾,而通常我們的需求是:背景半透明而其子控件不透明栓始。
先說解決辦法:
1.用一張半透明的圖片做背景。
這個方法當然可以達到要求玷犹,但是從編程初期前輩就教導我說在工程中盡量少加入資源混滔,能不用圖片的盡量不用圖片(如純色背景之類的)
2.使用colorWithWhite:alpha:方法
bgView.backgroundColor = [UIColor colorWithWhite:0.f alpha:0.5];
這也是我之前使用比較多的方法洒疚,white后面的參數(shù)表示灰度,從0-1之間表示從黑到白的變化坯屿,alpha就是你想調整的透明度油湖。由于我做的半透明背景基色基本非黑即白,這個方法基本也夠用了领跛。缺點就是不能設置其他顏色(彩色)的半透明
3.使用colorWithRed:green:blue:alpha:方法
這其實是我重點想說的方法乏德。為什么呢?
相信大家平時用代碼給視圖著色的時候吠昭,可能都用過類似
colorWithHexString:或colorWithHexColor:這樣的方法喊括,即:對UIColor類進行擴展,將16進制(如:#ffffff)的顏色字符串作為參入傳入矢棚,并返回該色值對應的UIColor類型的顏色
這一層的包裝使我們(起碼是我)對UIColor自帶的方法colorWithRed:green:blue:alpha:既熟悉又陌生郑什,熟悉是我們無數(shù)次調用這個擴展的方法來設置顏色,其本質都是在調用它,陌生可能是因為對它太過熟悉導致我?guī)缀跬浰€有一個alpha參數(shù)可以讓我們設置半透明的背景色蒲肋。而且通過這種方法就可以達到讓背景成為任何顏色的半透明而且其子控件不透明蘑拯。
當我發(fā)現(xiàn)可以用這個方法設置背景半透明而子控件不透明的時候,有點哭笑不得兜粘。那感覺就像是你突然發(fā)現(xiàn)你以為十分熟悉的室友竟然還有一項瞬間移動的技能申窘。
所以我決定以后給我的UIColor擴展類增加一個方法:
colorWithHexColor:alpha:(怎么添加邊笑邊流淚的表情...)
4. 在xib或者storyBoard里面對背景進行設置
如圖:
半透明背景xib設置.png
半透明背景xib設置.png
通過對背景顏色設置圖中的Opacity滑塊調整透明度,同樣可以達到設置背景半透明而子控件不透明的目的孔轴。
5.使用colorWithAlphaComponent:方法
在博友的提醒下,發(fā)現(xiàn)還有一個方法,現(xiàn)在補充上來.
和前面說的幾個設置背景色的方法不太一樣的是,這是一個實例方法,一個UIColor的實例調用此方法后會返回一個帶透明度的UIColor.使用方法如下:
UIColor *color = [UIColor blackColor];
bgView.backgroundColor = [color colorWithAlphaComponent:0.5];