- iPhone UIKit詳解
- 王志剛 王中元 朱蕾編著
- 1374字
- 2019-01-01 07:04:22
2.1 UIView基礎
2.1.1 UIView基本概念
UIView是組成畫面的基本元素。UIView是擁有位置屬性及一定尺寸的四邊形,一般有背景色。另外,UIView也可以包含字符串或者圖片等內容(信息)。例如UILabel就是包含字符串的UIView,而UIImageView是包含圖片的UIView。
最重要的一點是UIView可以擁有UIView類型的子元素。這樣可以輕易地在UIView上追加UIView,創建各種各樣的畫面。在iPhone應用程序中,應用程序的UIWindow也是UIView的子類。也就是說,所有的畫面都是在UIWindow中追加各種UIView而組成的,其形式如圖2-1所示。

圖2-1 各種UIView構成畫面的過程
2.1.2 UIView的位置與尺寸
除了在調用initWithFrame:方法初始化UIView時決定UIView位置或者尺寸外,還可以通過使用frame屬性或者center屬性實現。frame屬性中管理描繪UIView時左上角的坐標值以及寬度、長度。center屬性中管理UIView的中心坐標值。上述兩種屬性如圖2-2所示。

圖2-2 frame屬性與center屬性的示意圖
設置frame屬性值時使用CGRectMake,設置center屬性值時使用CGPointMake。另外,當需要取得值的情況時,其語法類似label.frame.origin.x。以下是具體的實例代碼。
UILabel* label = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease]; // frame的設置 label.frame = CGRectMake(0,0,200,50); // center設置 label.center = CGPointMake(160,240); // frame的參照 NSLog(@”x = %f”,label.frame.origin.x); NSLog(@”y = %f”,label.frame.origin.y); NSLog(@”width = %f”,label.frame.size.width); NSLog(@”height = %f”,label.frame.size.height); // center的參照 NSLog(@”x = %f”,label.center.x); NSLog(@”y = %f”,label.center.y);
2.1.3 隱藏UIView
使用的UIView的hidden屬性,可以在隱藏或者顯示UIView間進行切換。具體的是,當hidden屬性為YES時隱藏UIView,為NO時顯示UIView(默認為NO)。
如圖2-3所示是當hidden值分別為YES和NO時UILabel的顯示畫面。

圖2-3 通過hidden屬性控制UIView的顯示與隱藏
通過控制UILabel(實例變量為label_)的hidden屬性,切換UILabel的顯示與隱藏的代碼如下。
// hidden屬性的切換 label_.hidden = !label_.hidden;
2.1.4 修改背景色
通過修改UIView的backgroundColor屬性,可以改變其背景顏色。在backgroundColor屬性中以UIColor類型數據形式指定顏色(關于UIColor,請參考本書的第5.3節中的詳細介紹)。
表2-1是在backgroundColor屬性中設置不同值時的變化。
表2-1 backgroundColor屬性中設置不同值時的變化
表2-1中最后的實例中,調用UIColor的initWithRed:green:blue:alpha:方法進行顏色的初始化,在紅/綠/藍中各指定0.0至1.0的數據來確定具體的顏色。另外,當alpha的值小于1.0時表示增加背景的透明性,當alpha值為0.0時表示完全透明。
2.1.5 設置透明色
第2.1.4節介紹了當alpha值小于1.0時背景將變得透明。實際上UIView也擁有alpha屬性,當alpha值小于1.0時,可以使整個UIView變得透明。例如,對UILabel來說,不僅可以讓其背景色透明,還可以讓其中的文字也一起變得透明(如果有子元素,連子元素也一起變得透明)。
表2-2是通過控制alpha值來使UILabel(UIView的子類)變透明的實例示意表,為了更直觀,這里將UILabel后母體背景設置成白色。
表2-2 alpha值控制UIView的透明度實例示意表
2.1.6 alpha屬性與backgroundColor屬性alpha值的區別
使UIView變得透明時,使用第2.1.5節介紹的alpha值就可以了。而第2.1.4節介紹的backgroundColor屬性,通過指定其中的alpha值,只讓背景變得透明。
此處比較一下,當設置這兩種不同的alpha值時,對其中的子元素是如何影響的。首先,如圖2-4所示,在一個大的標簽上,放置兩個小的標簽(Child1與Child2)。此時還無法分辨,然后我們在大標簽上設置圖片背景,這樣當各標簽變得透明時,將會看見后面的圖片。

圖2-4 alpha值測試(測試開始前)
首先,我們將大標簽的alpha值設置為“0.5”。此時如圖2-5所示,包含各子元素小標簽在內都變得透明了,可以看見后面的圖片。

圖2-5 alpha值測試(alpha=0.5)
接著,將大標簽的alpha值保持為1.0,而將其backgrounColor屬性的Alpha值設置為“0.5”,子元素的小標簽并沒有變得透明,只是大標簽的背景變得透明而已,如圖2-6所示。

圖2-6 backgrounColor屬性的alpha值(alpha=0.5)
此處,設置backgrounColor屬性的Alpha值的代碼如下。
// 讓背景變得透明 labelParent_.backgroundColor = [labelParent_.backgroundColor colorWithAlphaComponent:0.5];