注意:还是直接用下面这个比较靠谱。尤其是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