本文为博主手写总结性文章,如若涉及版权问题,请与博主联系。
- (UIWindow *)AVPlayerWindow {
UIWindow *AVPlayerWindow = nil;
NSArray *windows = [[UIApplication sharedApplication] windows];
for (UIWindow *window in windows) {
if (!window.isHidden && [NSStringFromClass([window.rootViewController class]) isEqualToString:@"UIViewController"]) {
AVPlayerWindow = window;
AVPlayerWindow.windowLevel = UIWindowLevelStatusBar;
break;
}
}
return AVPlayerWindow;
}
补充一些用到的知识点:
1. AVPlayer:ios中常用的视频播放器,当视频打开的时候会创建一个新的Window,区别于之前的Window,新创建的Window当关闭视频是会自行销毁。
2. WindowLevel:每个UIWindow对象都有个windowLevel属性,该属性决定了windows间的位置关系,高等级window悬浮在低等级的上面. 绝大数情况,你都不需要管,因为系统帮你配置好了,配置是normal window level(用于显示应用级别的内容).如果系统级别的内容,比如收到了通知,状态栏等,系统也会自动配置为higher window level.
UIWindowLevelNormal:默认、最低
UIWindowLevelStatusBar:中间
UIWindowLevelAlert:最高
3. 监听window的改变,通过监听下面的通知你可以知道到window的显示和隐藏:
UIWindowDidBecomeVisibleNotification
UIWindowDidBecomeHiddenNotification
UIWindowDidBecomeKeyNotification
UIWindowDidResignKeyNotification
UIWindowDidBecomeVisibleNotification和UIWindowDidBecomeHiddenNotification会在当你使用代码控制window的hide/show时,然而当你应用进入后台时,不会发送通知,因为系统认为window是可见的.
UIWindowDidBecomeKeyNotification和UIWindowDidResignKeyNotification这两个通知帮你开发者确定那个window是key window.key window是指可以接受键盘事件和其他非触摸事件, touch events传递给发送触摸事件的window,而那些和坐标没关系的事件则传递给key window. 同一时间内只有一个key window.
4 贴出四种找window的方法
UIWindow *window = [[[UIApplication sharedApplication] delegate] window];
UIWindow *window = [[UIApplication sharedApplication].delegate window];
UIWindow * window = [[UIApplication sharedApplication].keyWindow ];
UIWindow * window = [UIApplication sharedApplication].windows[0];