美文网首页
iOS Window and Screen

iOS Window and Screen

作者: JQWONG | 来源:发表于2019-10-12 12:39 被阅读0次
    • iOS的几个基本界面元素:UIWindow(窗口)、UIScreen(屏幕)、UIView(视图)
    • 其中UIWindow和 UIView是为 iPhone 应用程序构造用户界面的可视组件。
      UIWindow 为内容显示提供背景平台,UIView负责绝大部分的内容描画,并负责响应用户的交互。

    Windows

    • UIWindow:显示程序内容的容器,用于管理屏幕显示的内容
      (APP是通过UIWindow这个载体呈现出来的,在applicationDidFinishLaunching中创建)

    • UIWindow对象是所有View的根(没有UIWindow的话UI是没办法显示的)UIView的子类

    • UIWindow 作用

      • 最顶层的视图容器,包含所有要显示的视图
      • 管理和协调应用程序的显示
      • 传递触摸消息到程序中的view以及对象,与controller协同工作
    • 一般只有一个,即使有多个也只有一个可以接受用户的点击事件,多个Window同时存在用WindowLevel来决定window的层级(z方向)

      • UIWindowLevelNormal:默认、最低
      • UIWindowLevelStatusBar:中间
      • UIWindowLevelAlert:最高
    • rootViewController:为Window提供可视部分,必须设置

    • isKeyWindow {get} :指定程序的keyWindow,keyWindow可以接受键盘和其他非接触相关事件,只能有一个keyWindow,不会影响视图层级显示

      • makeKeyAndVisible:可视并设为keyWindow,覆盖同层所有window
      • makeKey:只设为keyWindow,不改变window的可见性
      • becomeKey:系统自动调用以通知窗口它已成为keyWindow
      • resignKey:系统自动调用以通知窗口它将要注销掉keyWindow
    • 多个hidden=false的UIWindow应该显示哪个

      • 对于hidden的setter方法,最终显示的以最后执行过 hidden=false 的UIWindow为准,且执行 hidden=false 之前hidden的值为true。(hidden如果是从false改为false的不算最后改变UIWindow的显示状态)
      • 对于makeKeyAndVisible方法,最终显示的以最后执行过makeKeyAndVisible的UIWindow为准。
      • 对于先后分别用makeKeyAndVisible方法和hidden的setter方法,还是先后分别用hidden的setter方法和makeKeyAndVisible方法,结局同样以最后改变显示状态的UIWindow为准。
    • keyWindow的生命周期

      • 成为keyWindow:发送UIWindowDidBecomeKey通知,调用becomeKey()方法
      • 变为可见:发送UIWindowDidBecomeVisible方法
      • 变不可见:发送UIWindowDidBecomeHidden方法
      • 放弃成为keywindow:发送UIWindowDidResignKey通知,调用resignKey()方法
          func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
                  let window = UIWindow(frame: UIScreen.main.bounds)
                  //po window.isHidden->true
                  let rootVC = RootTableViewController()
                  window?.rootViewController = rootVC
                  window?.makeKeyAndVisible()
                  //po window.isHidden->false
                  return true
              }
    

    Popovers

    • 在iPad上,在App的顶部显示一个临时界面
    • Popover只能作为临时视图在iPad中使用,不能在iPhone中使用
    • Human Interface Guidelines
    • UIPopoverPresentationController:用于管理弹窗的内容

    Alerts

    • 向用户显示重要信息,或让用户进行重要选择
    • UIAlertController:用于展示Alerts信息
      • title:Alert的标题
      • message:Alerts的细节描述
      • preferredStyle:Alert展现的方式
        • alert:右图表现形式
        • actionSheet:左图表现形式
    • UIAlertAction:Alerts提供的选项
    func showAlert() {
                // Create alert controller
                let alertController = UIAlertController(title: "title",
                                                    message: "message",
                                                    preferredStyle: .alert)
                // Create the action buttons for the alert
            let defaultAction = UIAlertAction(title: "Agree", 
                            style: .default) { (action) in
                            // Respond to user selection of the action. 
                                             })
                // Configure the alert controller
            alertController.addAction(defaultAction)
                // Present the alert controller
                    self.present(alertController, animated: true, completion: nil)
    }
    

    Screens

    • UIScreen:iOS设备有一个主屏幕和附加屏幕
      • 获取主屏幕:class func main() -> UIScreen
      • 获取所有屏幕:class func screens() -> [UIScreen],第一个永远是主屏幕
      • 获取外部显示器镜像:class func mirrored() -> UIScreen

    • UIScreen与UIWindow的关系
      • 一个UIWindow必须有一个UIScreen,否则会黑屏看不到东西
      • 一个UIScreen可以有多个UIWindow,但App中只能有一个keyWindow

    参考文档

    Window and Screen
    UIWindow 原理与巧妙使用
    UIWindow详解及踩坑

    相关文章

      网友评论

          本文标题:iOS Window and Screen

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