概述
UIWindow是一种特殊的UIView,作为UIView视图的最顶层容器,包含所有要显示的UIView
前面iOS入门-03初识iOS程序中简单的介绍了一下iOS的UI框架启动过程,只是画了一张简图。我们平时开发中能够接触到的第一个创建的类实例应该是AppDelegate然后是UIWindow然后是ViewController(视图控制器,类似于Android中Activity、Flutter中Route)。这里我们先不深究启动过程,因为这个过程要想牢记需要到代码中去走一遍,而后面的代码中有很多机会。
本文重点
- 如何配置自己的UIWindow
- 跳过ViewController(视图控制器)添加控件到UIWindow中
最终显示效果很简单,在屏幕中添加一块有颜色的矩形控件。
示例
由于iOS13之后的变动,我们想要实现上面的功能就要做一些配置。
第一步:info.plist中找到下图中标注的的条目,然后点击减号删除。
第二步:
删除AppDelegate中下面两个方法(采用适配iOS13最简单的方式)
第三步
AppDelegate.h中
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (retain,nonatomic) UIWindow *window;//添加一个UIWindow属性
@end
AppDelegate.m中添加如下代码
#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
//当程序框架初始化成功之后,调用此函数
//此函数用来初始化我们的整个app
//对应用开发程序员开放的第一个入口函数
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//为整个程序创建一个UIWindow对象
//整个程序中就一个UIWindw对象(默认一个,我们可以自己创建更多的但是绝大多数情况下不用)
//UIScreen:含有屏幕的各种物理参数(类似于android中的DisplayMetrics)
//UIWindow也是继承于UIView的,比较特殊。
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
//根view控制器
self.window.rootViewController = [UIViewController new];
//window背景
self.window.backgroundColor = [UIColor blueColor];
//使window有效并显示
[self.window makeKeyAndVisible];
//直接添加一个view到window中
UIView* view = [UIView new];
view.frame = CGRectMake(50, 40, 100, 100);
view.backgroundColor = [UIColor redColor];
[self.window addSubview:view];
return YES;
}
@end