UIWindow的获取

974 阅读1分钟

注意:还是直接用下面这个比较靠谱。尤其是iOS11之后。

[UIApplication sharedApplication].keyWindow;

1、下面这种是比较严谨的方式

- (UIWindow *)lastWindow
{
    NSArray *windows = [UIApplication sharedApplication].windows;
    for(UIWindow *window in [windows reverseObjectEnumerator]) {
        
        if ([window isKindOfClass:[UIWindow class]] &&
            CGRectEqualToRect(window.bounds, [UIScreen mainScreen].bounds))
            
            return window;
    }
    
    return [UIApplication sharedApplication].keyWindow;
}

2、不要简单的使用使用

[[UIApplication sharedApplication].windows lastObject];

3、介绍下UIWindow的一个属性,windowLevel。 苹果文档中windowLevel有三种形式,并且是CGFloat类型的

UIKIT_EXTERN const UIWindowLevel UIWindowLevelNormal;
UIKIT_EXTERN const UIWindowLevel UIWindowLevelAlert;
UIKIT_EXTERN const UIWindowLevel UIWindowLevelStatusBar __TVOS_PROHIBITED;

首先验证苹果头文件中的UIWindow的windowLevel是多少

AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
NSLog(@"
UIWindowLevelNormal = %f  
UIWindowLevelAlert = %f  
UIWindowLevelStatusBar = %f  
appDelegate.window.windowLevel = %f",
UIWindowLevelNormal,
UIWindowLevelAlert,
UIWindowLevelStatusBar,
appDelegate.window.windowLevel);

验证结果
UIWindowLevelNormal = 0.000000  
UIWindowLevelAlert = 2000.000000  
UIWindowLevelStatusBar = 1000.000000  
appDelegate.window.windowLevel = 0.000000