本講內容
UIView
UILabel
一.UIWindow
Window是窗口,每個App都需要藉助Window將內容展現給用戶看
在iOS中,使用UIWindow類來表示窗口,通常一個應用程序只創建一個UIWindow對象,因爲Window的主要作用是呈現內容給用戶,因此我們不會對Window做太多操作
在創建window的時候,需要指定window的⼤大⼩小。
通常window的⼤大⼩小(frame)與屏幕(UIScreen)⼤大⼩小⼀一致。
二.UIView
View(視圖):代表屏幕上的一個矩形區域,iOS中用UIView來表示視圖
不同的控件代表不同類型的View
iOS中所看到的內容都是view或者其子類
創建視圖的步驟如下:
1、開闢空間並初始化視圖(初始化時,給出視圖位置和⼤大⼩小)
2、對視圖做⼀一些設置(⽐比如:背景顏⾊色)
3、將視圖添加到window上進⾏顯示
4、釋放視圖對象
UIView 的層級關係
1. 任何一個View 可以有很多的子視圖 ,但是只能有一個父視圖
2. 父視圖對子視圖擁有所有權,再添加子視圖的時候,子視圖的引用計數 +1
3. 父視圖和子視圖只是一個相對的概念
4. 子視圖的位置是以父視圖的座標原點來計數的
#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
-(void)dealloc
{
[_window release];
[super dealloc];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//創建一個應用程序窗口(window),其大小和手機屏幕一樣大
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
//給window一個背景顏色
self.window.backgroundColor = [UIColor clearColor];
//讓window成爲應用程序的主window,並且可見
[self.window makeKeyAndVisible];
//內存管理
[_window release];
//第一步創建視圖
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];;
//第二步配置視圖顏色
view.backgroundColor = [UIColor redColor];
//第三步添加視圖 self.window 是父視圖 view 是子視圖
[self.window addSubview:view];
//內存管理
[view release];
return YES;
}
frame是view的重要屬性,是我們做視圖佈局的關鍵,它決定了視圖 的大小和位置。
frame是⼀一個結構體,包含2部分內容:origin和size。
origin也是⼀一個結構體,包含2部分內容:x和y。
size同樣是⼀一個結構體,包含2部分內容:width和height。
frame的origin和size是相對於⽗父視圖來說的。
CGRectMake()函數可以幫我們快速構造⼀一個CGRect變量。
// 1.創建一個View,設置它的大小及位置
UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(100, 50, 50, 50)];
//2.設置背景顏色
view1.backgroundColor = [UIColor blueColor];
//tag 給View添加標記
view1.tag = 100;
//3.添加到父視圖
[self.window addSubview:view1];
//4.內存管理
[view1 release];
// frame 根據父視圖的座標原點(父視圖的左上角)
view3.frame = CGRectMake(0, 0, 50, 50);
//center(中⼼心點)也是view重要的屬性。
//center是個結構體,包含2個部分:x和y。
//center與frame有着密切的聯繫。
//center.x = frame.origin.x + frame.size.width/2;
//center.y = frame.origin.y + frame.size.height/2;
// center 中心點 控制試圖的位置,根據父視圖的座標原點來算 ,大小不變
bounds(邊界)也是view的重要屬性,⽤用於定義⾃自⼰己的邊界。它同frame一樣是一個CGRect結構體變量。
當⼀一個view設置bounds時,會把⾃自⼰己當成⼀一個容器,定義⾃自⼰己的邊界⼤大⼩小 以及 左上⾓角的初始座標。
當⼦子視圖添加到此視圖時,會根據bounds指定的原點(0,0)計算 frame,⽽而⾮非左上⾓角。
//bounds 確定視圖大小 X 和 Y 默認0,0 中心的不變
//父視圖管理子視圖
//將一個子視圖調整到前面
[self.window bringSubviewToFront:viewA];
//將一個子視圖發配到後面
[self.window sendSubviewToBack:viewB];
//子視圖能做的就是幹掉自己 操作自己,從父視圖中移除
[viewA removeFromSuperview];
//hidden 決定是否隱藏 , 默認是 NO 隱藏的
view2.hidden = YES;
//alpha 決定透明度 取值範圍是 0 ~ 1 ,透明度 會影響到它的子視圖
view2.alpha = 0.3;
// tag
//通過tag 找到相應的view
//它的父視圖 viewWithTag
UIView *tagView = [self.window viewWithTag:100];
tagView.frame = CGRectMake(0, 0, 100, 100);
//tag
//通過tag 找到相應的view
UIView *tagView1 = [self.window viewWithTag:80];
tagView1.frame = CGRectMake(0, 200, 100, 100);
//tagView的橫縱座標
CGFloat x = tagView.frame.origin.x;
CGFloat y = tagView.frame.origin.y;
//tagView的大小
CGFloat width = tagView.frame.size.width;
CGFloat height = tagView.frame.size.height;
UIView的addSubview:⽅方法可以添加⼦子視圖,對於同⼀一個視圖的所 有⼦子視圖來講,後添加的⼦子視圖會把已加的⼦子視圖蓋在下⾯面。
UIView提供了其他添加視圖的⽅方法。
frame、bounds、center之間有着微妙的聯繫。
它們之間的關係,見表格。

添加視圖
管理視圖層次
UIView除了提供添加視圖的⽅方法,還提供了管理視圖層次的⽅方法。
視圖的重要屬性
UIView作爲其他UI控件的BaseClass,提供了很多屬性。
UIBabel
UILabel(標籤):是顯⽰示⽂文本的控件。在App中UILabel是出現頻
率最⾼高的控件。 UILabel是UIView⼦子類,作爲⼦子類⼀一般是爲了擴充⽗父類的功能,
UILabel擴展了⽂文字顯⽰示的功能,UILabel是能顯⽰示⽂文字的視圖。
創建UILabel與創建UIView的步驟很相似。
1、開闢空間並初始化(如果本類有初始化⽅方法,使⽤用⾃自⼰己的;否則 使⽤用⽗父類的)。
2、設置⽂文本控制相關的屬性
3、添加到⽗父視圖上,⽤用以顯⽰示
4、釋放
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 50,180, 60)];
//自定義顏色 四個參數取值範圍都是0 ~ 1
label.backgroundColor = [UIColor colorWithHue:0.9 saturation:0.9 brightness:0.9 alpha:0.9];
label.backgroundColor = [UIColor lightGrayColor];
[self.window addSubview:label];
[label release];
//要顯示的內容
label.text = @"明天去看電影明天去看電影明天去看電影明天去看電影明天去看電影";
//文字的對齊方式
label.textAlignment = NSTextAlignmentCenter;
//文字的顏色,默認是黑色
label.textColor = [UIColor greenColor];
//字體大小,默認大小是 17
label.font = [UIFont systemFontOfSize:20];
//打印所有字體類型
NSLog(@"%@",[UIFont familyNames]);
//斷行方式
label.lineBreakMode = NSLineBreakByWordWrapping;
//文字的行數
label.frame = CGRectMake(100, 40, 175, 60);
//寫0會自己適應
label.numberOfLines = 0;
//label的大小自適應
[label sizeToFit];
label.font = [UIFont fontWithName:@"Arial-Bold" size:60]; //文字 選擇 大小 40;
//陰影顏色
label.shadowColor = [UIColor yellowColor];
//陰影偏移量 陰影向x正方向偏移2,向y正方向偏移1。
label.shadowOffset = CGSizeMake(2, 1);
控制文本顯示
UIView是所有可視化控件的基類。
UILabel是具有特定外觀特定功能的視圖。
UILabel側重於⽂文本的呈現。

總結
App靠window來呈現內容,⼀一個程序⼀一般只創建⼀一個window。
App中能看到的元素,都是UIView及其⼦子類。
UIView作爲所有可視化控件的BaseClass,提供了許多屬性和⽅方法。 顯⽰示效果控制(frame、alpha等)、視圖添加和移除(addSubview: 等)、視圖層次調整(bringSubviewToFront:等)等。
UILabel屬於具體的視圖,有⾃自⼰己的側重點