UIWindow(窗口)
UIWindow作为程序的窗口,容纳所有的界面元素。
程序中一般只有一个window,默认由系统初始化。
在IOS里UIWindow是UIView的子类。
- UIWindow初始化方法:
[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
手动创建UIWindow步骤:
- 在Supporting Files中选中info.plist配置文件;
- 找到Main storyboard file base name字段,将其值”Main”删除
- 在Appdelegate.m文件中,找到协议方法didFinishLaunchingWithOptions,在方法(视图加载完成)内部初始化UIWindow;
- UIWindow初始化代码示例:
// 程序加载完成,是应用程序的入口;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 初始化UIWindow,获取屏幕的大小初始化。
_window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
// 设置背景颜色
_window.backgroundColor = [UIColor whiteColor];
// 设置window的根视图控制器
ViewController *rootVc = [[ViewController alloc] init];
// 初始化根视图控制器
_window.rootViewController = rootVc;
// 呈现window
[_window makeKeyAndVisible];
return YES;
}
程序结构
Main函数:
创建自动释放池@autoreleasepool,跳转到UIApplicationMain函数。
UIApplicationMain函数:
处理运行时所需的实际工作。 需要传入的参数包含应用程序委托类名。
UIApplicationDelegate:
负责处理关键的系统消息。
AppDelegate:
实现了UIApplicationDelegate协议方法,作为程序的主入口。
// 程序加载完成
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 输出当前方法名称,_cmd表示当前方法的选择器,SEL类型。
NSLog(@"%@", NSStringFromSelector(_cmd));
#pragma mark - 手动创建UIWindow
// 获取屏幕大小初始化UIWindow
_window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
// 设置UIWindow背景颜色
_window.backgroundColor = [UIColor whiteColor];
// UIWindow层级
_window.windowLevel = UIWindowLevelNormal;
// 将UIWindow作为程序的key并且显示出来
[_window makeKeyAndVisible];
// 设置UIWindow根视图控制器
ViewController *RootVc = [[ViewController alloc] init];
_window.rootViewController = RootVc;
return YES;
}
// 程序即将失活
- (void)applicationWillResignActive:(UIApplication *)application {
NSLog(@"%@", NSStringFromSelector(_cmd));
}
// 程序进入后台
- (void)applicationDidEnterBackground:(UIApplication *)application {
NSLog(@"%@", NSStringFromSelector(_cmd));
}
// 程序即将进入前台
- (void)applicationWillEnterForeground:(UIApplication *)application {
NSLog(@"%@", NSStringFromSelector(_cmd));
}
// 程序处于活跃状态
- (void)applicationDidBecomeActive:(UIApplication *)application {
NSLog(@"%@", NSStringFromSelector(_cmd));
}
// 程序即将退出:异常退出
- (void)applicationWillTerminate:(UIApplication *)application {
NSLog(@"%@", NSStringFromSelector(_cmd));
}