官术网_书友最值得收藏!

  • 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];
主站蜘蛛池模板: 连平县| 宁安市| 濮阳县| 南郑县| 水城县| 泽州县| 巴南区| 丰原市| 广水市| 房山区| 常山县| 北流市| 承德市| 灵川县| 莎车县| 石楼县| 张家川| 新巴尔虎右旗| 手游| 浦江县| 大田县| 远安县| 烟台市| 绍兴县| 河间市| 曲靖市| 江门市| 宝清县| 黔南| 井陉县| 安国市| 宾川县| 龙海市| 泽州县| 肇庆市| 明光市| 乌拉特后旗| 辽宁省| 昭觉县| 佳木斯市| 高雄市|