UIWindow 使用介绍

一、简介

    UIWindos可以理解为一个app的窗口,作为Controller的容器,一个App至少拥有一个window,且只有一个keyWindow,也可以有多个Window.

   keyWindow:指当前的主window,屏幕的最外层的window,所以有多个window时需要遍历获取目的window.

   window可以不占满全屏幕,可以在屏幕的某个frame位置。

二、UIWindowLevel介绍

    window显示层级规则:由于window的显示层级是根据windowLevel来决定的,level高的window显示在上面,同level的keyWindow显示在前面。

    系统定义的level值。

//CFFloat值 UIWindowLevelNormal = 0.0  |  UIWindowLevelStatusBar = 1000.0  | UIWindowLevelAlert = 2000.0  | 

三、UIWindow属性方法


需求:添加一个全局按钮

思想:全局添加一个按钮大小的window,添加点击和拖动手势。

注意:

1.创建一个window之后,需要设置rootViewContorller

2.一般的主window,如果需要显示,则需要创建makeKeyAddVisibel或者将isHidden置为false

疑问?

1.如果没有在AppDelegate中添加全局变量,有时候在AppDelegate之外添加会失败,为什么?

2.怎么移除创建的window,是设置为hidden吗?

扩展

决绝直接更换rootViewController造成的图层叠加问题。


在AppDelegate中定义切showViewContorller:方法,在里面实现rootViewController的更换,在需要切换的页面调用代理实例进行切换。

示例代码[OC]

-(void)resetRootController:(UIViewController *)controller{
    UIWindow *window = self.window;
    [self.window.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; //每一个视图都执行移除
    self.window.rootViewController = nil;
    [self.window resignKeyWindow];
    [self.window removeFromSuperview];
    [window setRootViewController:controller];
    [window makeKeyWindow];
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值