LKS_MultiplatformAdapter.m 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #ifdef SHOULD_COMPILE_LOOKIN_SERVER
  2. //
  3. // LKS_MultiplatformAdapter.m
  4. //
  5. //
  6. // Created by nixjiang on 2024/3/12.
  7. //
  8. #import "LKS_MultiplatformAdapter.h"
  9. #import <UIKit/UIKit.h>
  10. @implementation LKS_MultiplatformAdapter
  11. + (BOOL)isiPad {
  12. static BOOL s_isiPad = NO;
  13. static dispatch_once_t onceToken;
  14. dispatch_once(&onceToken, ^{
  15. NSString *nsModel = [UIDevice currentDevice].model;
  16. s_isiPad = [nsModel hasPrefix:@"iPad"];
  17. });
  18. return s_isiPad;
  19. }
  20. + (CGRect)mainScreenBounds {
  21. #if TARGET_OS_VISION
  22. return [LKS_MultiplatformAdapter getFirstActiveWindowScene].coordinateSpace.bounds;
  23. #else
  24. return [UIScreen mainScreen].bounds;
  25. #endif
  26. }
  27. + (CGFloat)mainScreenScale {
  28. #if TARGET_OS_VISION
  29. return 2.f;
  30. #else
  31. return [UIScreen mainScreen].scale;
  32. #endif
  33. }
  34. #if TARGET_OS_VISION
  35. + (UIWindowScene *)getFirstActiveWindowScene {
  36. for (UIScene *scene in UIApplication.sharedApplication.connectedScenes) {
  37. if (![scene isKindOfClass:UIWindowScene.class]) {
  38. continue;
  39. }
  40. UIWindowScene *windowScene = (UIWindowScene *)scene;
  41. if (windowScene.activationState == UISceneActivationStateForegroundActive) {
  42. return windowScene;
  43. }
  44. }
  45. return nil;
  46. }
  47. #endif
  48. + (UIWindow *)keyWindow {
  49. #if TARGET_OS_VISION
  50. return [self getFirstActiveWindowScene].keyWindow;
  51. #else
  52. return [UIApplication sharedApplication].keyWindow;
  53. #endif
  54. }
  55. + (NSArray<UIWindow *> *)allWindows {
  56. #if TARGET_OS_VISION
  57. NSMutableArray<UIWindow *> *windows = [NSMutableArray new];
  58. for (UIScene *scene in
  59. UIApplication.sharedApplication.connectedScenes) {
  60. if (![scene isKindOfClass:UIWindowScene.class]) {
  61. continue;
  62. }
  63. UIWindowScene *windowScene = (UIWindowScene *)scene;
  64. [windows addObjectsFromArray:windowScene.windows];
  65. // 以UIModalPresentationFormSheet形式展示的页面由系统私有window承载,不出现在scene.windows,不过可以从scene.keyWindow中获取
  66. if (![windows containsObject:windowScene.keyWindow]) {
  67. if (![NSStringFromClass(windowScene.keyWindow.class) containsString:@"HUD"]) {
  68. [windows addObject:windowScene.keyWindow];
  69. }
  70. }
  71. }
  72. return [windows copy];
  73. #else
  74. return [[UIApplication sharedApplication].windows copy];
  75. #endif
  76. }
  77. @end
  78. #endif /* SHOULD_COMPILE_LOOKIN_SERVER */