• iOS UIKit :UIWindow


    iOS UIKit :UIWindow

    UIQWindow定义了一个window对象来管理views。一个软件只能有一个window。window的主要职能使为view提供显示取和向view传递事件。想要改变软件显示的内容,你可以改变window的root view。

    UIWindow的screen属性指定了window的显示属性包括:bounds, mode, and brightness.

    window notifications用来监听window 和 screen的改变,包括:

    UIWindowDidBecomeVisibleNotification
    UIWindowDidBecomeHiddenNotification
    UIWindowDidBecomeKeyNotification
    UIWindowDidResignKeyNotification 

    UIWindow继承自UIView,关于这一点可能有点逻辑障碍,画框怎么继承自画布呢?不要过于去专牛角尖,画框的形状不就是跟画布一样吗?拿一块画布然后用一些方法把它加强,是不是可以当一个画框用呢?这也是为什么 一个view可以直接加到另一个view上去的原因了。一个应用程序只能有一个画框。

    看一下系统的初始化过程(在application didFinishLauchingWithOptions里面):

    复制代码
    - (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
       UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
       myViewController = [[MyViewController alloc] init];
       window.rootViewController = myViewController;
       [window makeKeyAndVisible];
       return YES;
    }
    复制代码

    创建一个an external display:

    复制代码
    - (void)checkForExistingScreenAndInitializeIfPresent
    {
        if ([[UIScreen screens] count] > 1)
        {
            // Get the screen object that represents the external display.
            UIScreen *secondScreen = [[UIScreen screens] objectAtIndex:1];
            // Get the screen's bounds so that you can create a window of the correct size.
            CGRect screenBounds = secondScreen.bounds;
     
            self.secondWindow = [[UIWindow alloc] initWithFrame:screenBounds];
            self.secondWindow.screen = secondScreen;
     
            // Set up initial content to display...
            // Show the window.
            self.secondWindow.hidden = NO;
        }
    }
    
    - (void)setUpScreenConnectionNotificationHandlers
    {
        NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
     
        [center addObserver:self selector:@selector(handleScreenDidConnectNotification:)
                name:UIScreenDidConnectNotification object:nil];
        [center addObserver:self selector:@selector(handleScreenDidDisconnectNotification:)
                name:UIScreenDidDisconnectNotification object:nil];
    }
    
    - (void)handleScreenDidConnectNotification:(NSNotification*)aNotification
    {
        UIScreen *newScreen = [aNotification object];
        CGRect screenBounds = newScreen.bounds;
     
        if (!self.secondWindow)
        {
            self.secondWindow = [[UIWindow alloc] initWithFrame:screenBounds];
            self.secondWindow.screen = newScreen;
     
            // Set the initial UI for the window.
        }
    }
     
    - (void)handleScreenDidDisconnectNotification:(NSNotification*)aNotification
    {
        if (self.secondWindow)
        {
            // Hide and then delete the window.
            self.secondWindow.hidden = YES;
            self.secondWindow = nil;
     
        }
     
    }
    复制代码

     

     
     
    分类: iOS
    标签: iOSUIKit
  • 相关阅读:
    K-Means原理及代码实现
    Windows 10安装Tomcat
    Maven笔记四:在Eclipse中创建java web项目
    Maven笔记三:使用Ecplise创建一个Maven项目
    Maven笔记二:Maven仓库
    Windows 10 安装Eclipse
    Maven笔记一:Maven安装与配置(Windows 10)
    Docker学习笔记五:Dockerfile
    Docker学习笔记五:docker简单实践(Docker部署Java应用)
    Zabbix笔记三:zabbix监控指标
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3093828.html
Copyright © 2020-2023  润新知