一直以來都是用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];
將返回值設置給底層的背景顏色,也可以保證子控件不透明.