美文网首页
iOS UIWindowLevel随笔

iOS UIWindowLevel随笔

作者: FieryDragon | 来源:发表于2019-10-12 18:37 被阅读0次

UIWindow的显示可以通过UIWindowLevel来区分优先级,所有的window都会被加在界面上,只不过会通过优先级罗列起来,UIWindowLevel大的在上层显示,UIWindowLevel小的在下层显示。
UIWindowLevel优先级相等的情况下,看谁后实例化了,谁后实例化谁先显示。
由最上层window捕获点击事件.

  • 多层window展示时, keyWindow值及windows属性值
 NSArray *array = @[@(1),@(3),@(5),@(4),@(2)];
    for (int i = 0; i<array.count; i++) {
        NSInteger level = [array[i] integerValue];
        UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        window.hidden = NO;
        window.backgroundColor = [UIColor redColor];
        window.windowLevel = level;
        ViewController *VC= [[ViewController alloc] init];
        VC.window = window;
        VC.level = level;
        window.rootViewController = VC;
        [window makeKeyAndVisible];
    }
    
    NSArray *windowsArray = [UIApplication sharedApplication].windows;
    for (int i = 0; i<windowsArray.count; i++) {
        UIWindow *window = [windowsArray objectAtIndex:i];
        NSLog(@"%lf",window.windowLevel);
    }
    NSLog(@"windowLevel ===%lf",[UIApplication sharedApplication].keyWindow.windowLevel);
2019-09-04 18:38:52.452417+0800 Test[13421:221809] 0.000000
2019-09-04 18:38:52.452609+0800 Test[13421:221809] 1.000000
2019-09-04 18:38:52.452725+0800 Test[13421:221809] 2.000000
2019-09-04 18:38:52.452816+0800 Test[13421:221809] 3.000000
2019-09-04 18:38:52.452900+0800 Test[13421:221809] 4.000000
2019-09-04 18:38:52.452980+0800 Test[13421:221809] 5.000000
2019-09-04 18:38:52.453074+0800 Test[13421:221809] windowLevel ===2.000000

结论: keyWindow为最后一次添加的window,Windows数据按照UIWindowLevel排序(由小至大),同展示顺序.

  • Window消失后keyWindow值
NSArray *array = [UIApplication sharedApplication].windows;
    for (int i = 0; i<array.count; i++) {
        UIWindow *window = [array objectAtIndex:i];
        NSLog(@"%lf",window.windowLevel);
    }
    
    NSLog(@"windowLevel ===%lf",[UIApplication sharedApplication].keyWindow.windowLevel);
    
    UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
    keyWindow.rootViewController = nil;
    keyWindow.hidden = YES;
    keyWindow = nil;
2019-09-04 18:46:44.998076+0800 Test[13496:224965] 0.000000
2019-09-04 18:46:44.998332+0800 Test[13496:224965] 1.000000
2019-09-04 18:46:44.998557+0800 Test[13496:224965] 2.000000
2019-09-04 18:46:44.998731+0800 Test[13496:224965] 3.000000
2019-09-04 18:46:44.998890+0800 Test[13496:224965] 4.000000
2019-09-04 18:46:44.999049+0800 Test[13496:224965] 5.000000
2019-09-04 18:46:44.999269+0800 Test[13496:224965] windowLevel ===2.000000
2019-09-04 18:46:45.002183+0800 Test[13496:224965] dealloc


2019-09-04 18:47:05.488600+0800 Test[13496:224965] 0.000000
2019-09-04 18:47:05.488824+0800 Test[13496:224965] 1.000000
2019-09-04 18:47:05.488985+0800 Test[13496:224965] 3.000000
2019-09-04 18:47:05.489114+0800 Test[13496:224965] 4.000000
2019-09-04 18:47:05.489317+0800 Test[13496:224965] 5.000000
2019-09-04 18:47:05.489483+0800 Test[13496:224965] windowLevel ===5.000000
2019-09-04 18:47:05.491719+0800 Test[13496:224965] dealloc


2019-09-04 18:47:11.040809+0800 Test[13496:224965] 0.000000
2019-09-04 18:47:11.041034+0800 Test[13496:224965] 1.000000
2019-09-04 18:47:11.041197+0800 Test[13496:224965] 3.000000
2019-09-04 18:47:11.041465+0800 Test[13496:224965] 4.000000
2019-09-04 18:47:11.041629+0800 Test[13496:224965] windowLevel ===4.000000
2019-09-04 18:47:11.043707+0800 Test[13496:224965] dealloc

结论: 最后添加的window取消后, keyWindow为当前展示在最上层window,即windowLevel最大的window(Windows属性最后一位).

相关文章

  • iOS UIWindowLevel随笔

    UIWindow的显示可以通过UIWindowLevel来区分优先级,所有的window都会被加在界面上,只不过会...

  • iOS UIWindow UIWindowLevel 使用

    前言:大家都知道在安卓上的window 有相关的level,那么iOS上是不是也有相关的level呢?其实是有的只...

  • iOS UIWindowLevel的理解

    一、UIWindow是一种特殊的UIView,通常在一个程序中只会有一个UIWindow,但可以手动创建多个UIW...

  • UIWindow讲解

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

  • UIWindow

    1 描述 2 加载过程 3 UIWindowLevel UIWindow 有三个层级,分别是Normal ,Sta...

  • UIWindow的UIWindowLevel属性

    windowLevel越大, 显示就在越上层, 当windowLevel相等时, 后实例化的显示在最上层. .End

  • iOS获取当前显示页面controller

    关于window UIWindow在显示的时候会根据UIWindowLevel进行排序的,即Level高的将排在所...

  • 使用charles/Stream抓包

    charles激活:[随笔] ios连接charles提示unknown[https://segmentfault...

  • UIwindow的使用

    1. UIWindowLevel 让UIView 和 UIWindow透明不遮挡下放操作的方法 设置父视图的的透明...

  • iOS随笔小记 -- HomeKit(二 : 实现HomeKit

    接着(iOS随笔小记 -- HomeKit(一 : 认识HomeKit) ) 一: 相关概念 1 > home (...

网友评论

      本文标题:iOS UIWindowLevel随笔

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