// // YMWindowUtils.m // MSYOUPAI // // Created by YoMi on 2024/2/4. // Copyright © 2024 MS. All rights reserved. // #import "YMWindowUtils.h" @implementation YMWindowUtils + (nullable UIWindowScene *)activeScene NS_AVAILABLE_IOS(13.0) { NSSet *connectedScenes = UIApplication.sharedApplication.connectedScenes; for (UIScene *scene in connectedScenes) { if (scene.activationState == UISceneActivationStateForegroundActive) { return (UIWindowScene *)scene; } } return nil; } + (nullable UIWindowScene *)activeWindowScene NS_AVAILABLE_IOS(13.0) { NSSet *connectedScenes = UIApplication.sharedApplication.connectedScenes; for (UIScene *scene in connectedScenes) { if (scene.activationState == UISceneActivationStateForegroundActive && [scene isKindOfClass:UIWindowScene.class]) { return (UIWindowScene *)scene; } } return nil; } + (UIWindow *)keyWindow { if (@available(iOS 13.0, *)) { UIWindow *window = [self keyWindowFromSceneAPI]; return window != nil ? window : UIApplication.sharedApplication.keyWindow; } else { return UIApplication.sharedApplication.keyWindow; } } + (nullable UIWindow *)keyWindowFromSceneAPI NS_AVAILABLE_IOS(13.0) { NSDictionary *infoDic = NSBundle.mainBundle.infoDictionary[@"UIApplicationSceneManifest"]; // 通过infoDic,判断是否使用UIScene if (infoDic) { // 通过supportsMultipleScenes,判断是否支持多个场景 if (UIApplication.sharedApplication.supportsMultipleScenes) { // 获取所有已链接Scenes NSSet *connectedScenes = [UIApplication sharedApplication].connectedScenes; for (UIScene *scene in connectedScenes) { UISceneActivationState activationState = scene.activationState; // 通过activationState,获取当前场景window对象 if (activationState == UISceneActivationStateForegroundActive && [scene isKindOfClass:UIWindowScene.class]) { for (UIWindow *window in [(UIWindowScene *)scene windows]) { if (window.isKeyWindow) { return window; } } } } }else{ UIWindow *window = ((id)[UIApplication sharedApplication].connectedScenes.anyObject.delegate).window; if (window.isKeyWindow) { return window; } } } return nil; } @end