天天看点

iOS入门-06UIWindow概述示例

概述

UIWindow是一种特殊的UIView,作为UIView视图的最顶层容器,包含所有要显示的UIView

前面iOS入门-03初识iOS程序中简单的介绍了一下iOS的UI框架启动过程,只是画了一张简图。我们平时开发中能够接触到的第一个创建的类实例应该是AppDelegate然后是UIWindow然后是ViewController(视图控制器,类似于Android中Activity、Flutter中Route)。这里我们先不深究启动过程,因为这个过程要想牢记需要到代码中去走一遍,而后面的代码中有很多机会。

本文重点

  • 如何配置自己的UIWindow
  • 跳过ViewController(视图控制器)添加控件到UIWindow中

最终显示效果很简单,在屏幕中添加一块有颜色的矩形控件。

示例

由于iOS13之后的变动,我们想要实现上面的功能就要做一些配置。

第一步:info.plist中找到下图中标注的的条目,然后点击减号删除。

iOS入门-06UIWindow概述示例

第二步:

删除AppDelegate中下面两个方法(采用适配iOS13最简单的方式)

iOS入门-06UIWindow概述示例

第三步

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