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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容