123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- //
- // 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<UIScene *> *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<UIScene *> *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 <UIScene *> *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<UIWindowSceneDelegate>)[UIApplication sharedApplication].connectedScenes.anyObject.delegate).window;
- if (window.isKeyWindow) {
- return window;
- }
- }
- }
- return nil;
- }
- @end
|