iOS 設置視圖半透明而子控件不透明

讓一個控件半透明,通常我們第一個想到的方法就是調整控件的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里面對背景進行設置

如圖:

Aaron Swartz

半透明背景xib設置.png

半透明背景xib設置.png

通過對背景顏色設置圖中的Opacity滑塊調整透明度,同樣可以達到設置背景半透明而子控件不透明的目的。

5.使用colorWithAlphaComponent:方法

在博友的提醒下,發現還有一個方法,現在補充上來.
和前面說的幾個設置背景色的方法不太一樣的是,這是一個實例方法,一個UIColor的實例調用此方法后會返回一個帶透明度的UIColor.使用方法如下:

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

經測試,將返回值設置給底層的背景顏色,也可以保證子控件不透明.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容