UIWindow

作者: 四月白绵羊 | 来源:发表于2017-03-22 05:05 被阅读0次

简介

UIWindow为用户交互界面提供了一个背景,并且监听和处理用户的操作。UIWindow 本身并不可见,但是它们对于views对象的显示尤为重要。每一个显示的view 都是嵌套在一个window上面的,并且每一个window都是相互独立的。App的时间总是先由window截获,然后发送给相应的view进行处理。window和viewcontroller一起合作才实现了app关于页面转向和其他一些基础的功能

概览

WIndow 是应用的基本组成部分,但是实际上你很少和window打交道。UIKit已经帮你解决了大部分和window操作相关的事件了。你需要做的就是:

  1. 在App开始时,提供一个主Window。
  2. 如果有其他战士需求,就创建另外的Windows。

大部分App都只用到一个Window。但是你有其他需求的时候,也可以创建另外的WIndows来展现内容。
你可以使用Window来完成一下工作:

  1. 设置window 的z坐标,它会影响该window相对于其他window的视角。
  2. 显示window,并让它成为事件接收器。
  3. 获取Window 中坐标的转换(转出 或者 转入)。
  4. 改变window 的根视图控制器。
  5. 改变 Window 所显示的 UIScreen。
    一般不建议继承UIWindow,因为能想要集成在UIWindow 上的操作,能够很容易的在UIViewController上面实现出来。 但是某些情况下,当你想要复写 becomeKey() 和 resignKey() 这两个方法时,可以继承UIWindow。

创建额外的Windows

除了主Window,你还需要负责创建和维护其他的windows。通常的使用方式是在额外的Window 上面显示内容,或者在同一屏幕上显示多个Windows。
当创建Window 的时候,需要赋给Window大小和在哪个屏幕上显示。你也应当写明提供视图的根视图控制器。尽管你可以直接在Window上面添加Views,但是使用试图控制器可以更方便的来管理Window 的内容。使用视图控制器可以分隔Window 和 显示的内容。
Listing 1 是一个创建第二个Window 的例子。
Listing 1 :

func configureExternalDisplayAndShowWithContent(rootVC : UIViewController) {
    let screens = UIScreen.screens()
    // Configure the content only if a second screen is available.
    if screens.count > 1 {
        let externalScreen = screens[1]
        let screenBounds = externalScreen.bounds
        // Create and configure the window.
        self.externalWindow = UIWindow.init(frame: screenBounds)
        self.externalWindow!.windowLevel = UIWindowLevelNormal
        self.externalWindow!.screen = externalScreen
        
        // Install the root view controller
        self.externalWindow!.rootViewController = rootVC
        
        // Show the window, but do not make it key
        self.externalWindow!.hidden = false
    }
    else {
        // No external display available for configuration.
    }
}

理解键盘交互

因为触摸事件是传递给所在的Window的,而那些没有相对坐标位置的事件则是传递给 key window ,一个时间点下只有一个key window,你可以通过isKeyWindow 属性来改变谁是主 Window。大多数情况下,你App 的主window 就是 key window。但是UIKit 也设计了不同的window。
如果你需要知道谁是 key window,可以通过监听 UIWindowDidBecomeKeyUIWindowDidResignKey 这两个系统通知来获取信息。当key window 发生改变的时候,系统会发出这两个通知。

详细参照

Apple UIWindow Document

相关文章

  • UIWindow

    目录:1、UIWindow简介2、UIWindow的创建3、获取UIWindow 1、UIWindow简介 UIW...

  • UIWindow 原理与巧妙使用 makeKeyAndVisib

    - UIWindow 简介- UIWindow 概述- 我们可以使用 UIWindow 来作什么?- makeKe...

  • UIWindow、UIView、CALayer

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

  • UIWindow讲解

    1.UIWindow & UIWindowLevel 一、简单介绍UIWindow是什么? UIWindow是一种...

  • iOS开发之UIWindow的使用

    一、UIWindow简介 UIWindow是最顶级的界面容器。UIWindow继承自UIView。 UIWindo...

  • iOS 开发- UI篇-UIWindow介绍

    UIWindow 简单介绍原文链接? iOS开发UI篇—UIWindow简单介绍 一、简单介绍 UIWindow是...

  • iOS --- UI 简单总结

    代码创建UIWindow对象 Xcode7之后使用代码创建UIWindow对象: //创建UIWindow对象 s...

  • iOS关于UIWindow

    UIWindow简介: 在iOS App中,UIWindow是最顶层的界面内容,我们使用UIWindow和UIVi...

  • UIWindow 知识梳理

    UIWindow简介 在iOS开发中,UIWindow和UIView一样都是用来呈现界面的。UIWindow并不包...

  • UIWindow的基本使用

    二、使用UIWindow 1、简介在iOS App中,UIWindow是最顶层的界面内容,我们使用UIWindow...

网友评论

      本文标题:UIWindow

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