iOS開發(fā)-Alpha,Hidden與Opaque區(qū)別
UIView中的這三個屬性用的比較多蔗候,尤其是Alpha和Opaque之間有的時候不是很好分別怒允,稍微整理下:
Alpha(不透明度)
alpha是不透明度,屬性為浮點類型的值锈遥,取值范圍從0到1.0纫事,表示從完全透明到完全不透明,其特性有當前UIView的alpha值會被其所有subview繼承所灸。alpha值會影響到UIView跟其所有subview丽惶,alpha具有動畫效果。當alpha為0時爬立,跟hidden為YES時效果一樣钾唬,但是alpha主要用于實現(xiàn)隱藏的動畫效果,在動畫塊中將hidden設置為YES沒有動畫效果侠驯。
1
2
3
4
5
6
7
8
UIView *view=[[UIView alloc]initWithFrame:CGRectMake(30, 100, CGRectGetWidth(self.view.bounds)-60, 150)];
[view setBackgroundColor:[UIColor redColor]];
[view setAlpha:0.5];
[self.view addSubview:view];
UIView *childView=[[UIView alloc]initWithFrame:CGRectMake(20, 30, 100, 80)];
[childView setBackgroundColor:[UIColor blueColor]];
[view addSubview:childView];
設置backgroundColor的alpha值只影響當前UIView的背景抡秆,并不會影響其所有subview。Clear Color就是backgroundColor的alpha為1.0吟策。alpha值會影響backgroundColor最終的alpha,假設UIView的alpha為0.8儒士,backgroundColor的alpha為0.5,那么backgroundColor最終的alpha為0.4(0.8*0.5)檩坚。
Hidden(隱藏)
Hidden表示UIView是否隱藏着撩,Hidden設置為YES表示當前UIView的所有subview也會被隱藏诅福,忽略subview的hidden屬性。Hidden只要設置為YES睹酌,所有的subview都會隱藏权谁。UIView隱藏之后也會從當前的響應者事件中移除。
Opaque
opaque也是表示當前的UIView的不透明度憋沿,設置是否之后對于UIView的顯示并沒有什么影響,官方文檔的意思簡單點說就是opaque默認為YES旺芽,如果alpha小于1,那么應該設置opaque設置為NO辐啄,但是如果alpha為1采章,opaque設置為NO,產(chǎn)生的后果是不可預料的~
1
2
3
4
5
This property provides a hint to the drawing system?as?to how it should treat the view. If?set?to YES, the drawing system treats the view?as?fully opaque, which allows the drawing system to optimize some drawing operations and improve performance. If?set?to NO, the drawing system composites the view normally with other content. The?default?value of?this?property?is?YES.
An opaque view?is?expected to fill its bounds with entirely opaque content—that?is, the content should have an alpha value of 1.0. If the view?is?opaque and either does not fill its bounds or contains wholly or partially transparent content, the results are unpredictable. You should always?set?the value of?this?property to NO?if?the view?is?fully or partially transparent.
You only need to?set?a value?for?the opaque property?for?subclasses of UIView that draw their own content?using?the drawRect: method. The opaque property has no effect?for?system provided classes such?as?UIButton, UILabel, UITableViewCell, etc.
如果了解opaque壶辜,需要點屏幕繪制的知識悯舟,屏幕上的每個像素點都是通過RGBA值(Red、Green砸民、Blue三原色再配上Alpha透明度)表示的抵怎,當紋理(UIView在繪圖系統(tǒng)中對應的表示項)出現(xiàn)重疊時,GPU會按照Result = Source + Destination * (1 - SourceAlpha)公式計算重疊部分的像素岭参。
Result是結(jié)果RGB值反惕,Source為處在重疊頂部紋理的RGB值,Destination為處在重疊底部紋理的RGB值演侯。
當SourceAlpha為1時姿染,繪圖系統(tǒng)認為下面的顏色全部被遮蓋住了,Result=Source秒际,如果Source的Alpha不為0悬赏,上下層顏色就會進行合成,所以opaque默認設置YES娄徊,提升繪制性能闽颇,如果開發(fā)中UIView是不透明的,opaque設置為YES寄锐, 如果opaque設置NO进萄,那么Alpha應該小于1.
參考資料:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/index.html#//apple_ref/occ/instp/UIView/opaque
作者:FlyElephant
出處:http://www.cnblogs.com/xiaofeixiang
說明:博客經(jīng)個人辛苦努力所得,如有轉(zhuǎn)載會特別申明锐峭,博客不求技驚四座,但求與有緣人分享個人學習知識,生活學習提高之用可婶,博客所有權(quán)歸本人和博客園所有沿癞,如有轉(zhuǎn)載請在顯著位置給出博文鏈接和作者姓名,否則本人將付諸法律矛渴。