美文网首页
UIWindow详解

UIWindow详解

作者: 小凡凡520 | 来源:发表于2018-08-05 15:57 被阅读7次
概述

UIWindow继承自UIView,UIWindow是一种特殊的UIView,通常在一个程序中只会有一个UIWindow,但可以手动创建多个UIWindow,同时加到程序里面。即使有多个UIWindow对象,也只有一个UIWindow可以接受到用户的触屏事件(即主窗口)。

iOS程序启动完毕后,先创建Application,再创建它的代理,之后创建UIWindow(创建的第一个对象是UIApplication),接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了。

一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWindow。也就说,没有UIWindow,就看不见任何UI界面。

主窗口和次窗口
  • 主窗口
    [self.window makekeyandvisible]让窗口成为主窗口,并且显示出来。有这个方法,才能把信息显示到屏幕上。
  • 次窗口
    需要定义一个Window属性来保存变量。 window的属性定义为strong,就是为了让其不销毁, 一个应用程序只能有一个主窗口。只有主窗口才能响应键盘的输入事件,如果不能输入内容,可以查看是否是显示在主窗口上,不在主窗口上的不能响应。
WindowLevel

UIWindow有三个层级,分别是Normal,StatusBar,Alert。Normal级别是最低的,StatusBar处于中等水平,Alert级别最高。而通常我们的程序的界面都是处于Normal这个级别上的,系统顶部的状态栏应该是处于StatusBar级别,UIActionSheet和UIAlertView这些通常都是用来中断正常流程,提醒用户等操作,因此位于Alert级别。

根据window显示级别优先的原则,级别高的会显示在上面,级别低的在下面,我们程序正常显示的view位于最底层。

当Level层级相同的时候,只有第一个设置为KeyWindow的显示出来,后面同级的再设置KeyWindow也不会显示。UIWindow在显示的时候是不管KeyWindow是谁,都是Level优先的,即Level最高的始终显示在最前面。

storyboard在项目中的创建过程

当用户点击应用程序图标的时候,先执行Main函数,执行UIApplicationMain(),根据其第三个和第四个参数创建Application,创建代理,并且把代理设置给application(看项目配置文件info.plist里面的storyboard的name,根据这个name找到对应的storyboard),开启一个事件循环,当程序加载完毕,他会调用代理的didFinishLaunchingWithOptions:方法。在调用didFinishLaunchingWithOptions:方法之前,会加载storyboard,在加载的时候创建一个window,接下来会创建箭头所指向的控制器,把该控制器设置为UIWindow的根控制器,接下来再将window显示出来,即看到了运行后显示的界面。

rootViewController和addSubview的区别
  • rootViewController
    rootViewController是UIWindow的一个遍历方法,通过设置该属性为要添加view对应的ViewController,UIWindow将会自动将其view添加到当前window中,同时负责ViewController和view的生命周期的维护,防止其过早释放
  • addSubview
    直接将view通过addSubview方式添加到window中,程序负责维护view的生命周期以及刷新,但是并不会为去理会view对应的ViewController,因此采用这种方法将view添加到window以后,我们还要保持view对应的ViewController的有效性,不能过早释放。

相关文章

  • UIWindow、UIView、CALayer

    UIWindow的windowLevel属性 UIWindow简单介绍 UIWindow详解及踩坑 UIWindo...

  • UIWindow详解

    概述 UIWindow继承自UIView,UIWindow是一种特殊的UIView,通常在一个程序中只会有一个UI...

  • UIWindow详解

    前言 最近在做一个通知弹框的需求,应用到了UIWindow,之前没有研究过,趁着这次机会了解下UIWindow。简...

  • UIWindow 详解

    概念: UIWindw定义了一个负责管理,协调一个App的View是如何显示在设备屏幕上的窗口类,除非一个App可...

  • UIWindow 详解

    UIWindow是Cocoa框架的重要组件之一,所有的UIView都要通过UIWindow来进行展现,没有UIWi...

  • iOS UIWindow 详解

    查看滴滴开源的 DoraemonKit 以及阿里开源的youku-sdk-tool-woodpecker时, 看到...

  • iOS 之详解UIWindow

    UIWindow用途? 展示应用程序的用户界面(所有展示的界面都需要添加到UIWindow上) 分发事件到各个用户...

  • UIKit-UIWindow详解

    这篇关于UIWindow的文章是在iOS7版本时研究发布的,一个APP同时创建多个window本就不被苹果所支持,...

  • iOS-UIWindow详解

    1.UIWindow简介 UIWindow是一种特殊的UIView,通常在一个app中至少会有一个UIWindow...

  • UIWindow详解及踩坑

    一、问题背景 最近需求量放缓,想起了以前曾经later的小需求,也就是弹出来的AlertView中间的文本框输入一...

网友评论

      本文标题:UIWindow详解

      本文链接:https://www.haomeiwen.com/subject/rcpbvftx.html