ios 查找当前项目中自己想要的Window(AVPlayer的Window)

本文为博主手写总结性文章,如若涉及版权问题,请与博主联系。

- (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];

你可能感兴趣的:(ios 查找当前项目中自己想要的Window(AVPlayer的Window))