一呢灶、UIWindow
1蛀恩、什么是UIWindow
管理和協(xié)調(diào)應(yīng)用程序的顯示抓歼。
UIWindow類是UIView的子類诞外,可以看作是特殊的UIView(UIView之后介紹)。
一般應(yīng)用程序只有一個UIWindow對象摄职。
二、UIWidow對象有兩種方式創(chuàng)建:
1、自動創(chuàng)建UIWindow對象
先執(zhí)行Main函數(shù)顽素,執(zhí)行UIApplicationMain()創(chuàng)建代理
看項目配置文件info.plist里面的StoryBoard的name
根據(jù)這個name找到對應(yīng)的StoryBoard,加載StoryBoard
在加載的時候創(chuàng)建一個window徒蟆。
2胁出、代碼創(chuàng)建UIWindow對象
// 創(chuàng)建UIWindow對象
// [UIScreen mainScreen].bounds是屏幕大小
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
// 給window設(shè)置背景顏色(白色)
self.window.backgroundColor = [UIColor whiteColor];
// 使window顯示
[self.window makeKeyAndVisible];
// 創(chuàng)建一個視圖控制器
UIViewController *VC = [[UIViewController alloc] init];
// 給Window指定根視圖控制器
self.window.rootViewController = VC;
二、UIView
1段审、什么是UIView
UIView表示屏幕上的一塊矩形區(qū)域全蝶。
它在App中占有絕對重要的地位。
因為iOS中幾乎所有可視化控件都是UIView的子類寺枉。
負責渲染區(qū)域的內(nèi)容
并且響應(yīng)該區(qū)域內(nèi)發(fā)生的觸摸事件抑淫。
2、UIView功能
管理矩形區(qū)域里的內(nèi)容
處理矩形區(qū)域中的事件
子視圖的管理
實現(xiàn)UIView動畫
UIView作為父類姥闪,子類也具有這些功能
3始苇、創(chuàng)建UIView
// 開辟空間創(chuàng)建UIView對象
// 設(shè)置frame確定UIView對象的位置以及大小
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
// 設(shè)置UIView對象的屬性:設(shè)置背景顏色
view.backgroundColor = [UIColor redColor];
// 將創(chuàng)建好的UIView對象添加到Window上顯示
[self.window addSubview:view];
4、frame
frame是UIView的重要屬性筐喳,是我們用于視圖布局的關(guān)鍵催式。
它決定了視圖的大小和位置。
frame是CGRect類型避归。
frame是基于它父視圖的坐標系而言的荣月。
5、UIView常用屬性
6槐脏、添加視圖
7喉童、應(yīng)用程序的啟動流程
main函數(shù):
任何一個程序,無論是基于Mac OS還是iOS,程序都是從main.m文件的main函數(shù)開始執(zhí)行的堂氯。
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
UIApplicationMain
UIApplicationMain在程序入口函數(shù)main函數(shù)中調(diào)用蔑担,主要實現(xiàn)了3個功能:
1.創(chuàng)建應(yīng)用程序(UIApplication)實例
2.創(chuàng)建應(yīng)用程序代理(AppDelegate)實例
3.建立事件循環(huán)(runloop:死循環(huán),不斷檢測程序運行狀態(tài)咽白,是否被觸摸啤握、晃動等)
UIApplicationMain參數(shù)
nt UIApplicationMain (
int argc,
char *argv[],
NSString *principalClassName,
NSString *delegateClassName
);
1、principalClassName:應(yīng)用程序?qū)ο蟮念惷║IApplication或其子類)
2晶框、delegateClassName:應(yīng)用程序delegate的類名排抬。(任何接受了UIApplicationDelegate的類)
UIApplicationMain根據(jù)上述兩個類名創(chuàng)建應(yīng)用程序?qū)嵗?yīng)用程序代理實例授段。然后建立事件循環(huán)(runloop)蹲蒲,檢測程序的各種事件(程序開始啟動,接收到觸摸等等)
應(yīng)用程序代理: