react-native-navigation的迁移库

RNNOverlayManager.m 1.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #import "RNNOverlayManager.h"
  2. #import "RNNOverlayWindow.h"
  3. @implementation RNNOverlayManager {
  4. NSMutableArray* _overlayWindows;
  5. }
  6. - (instancetype)init {
  7. self = [super init];
  8. _overlayWindows = [[NSMutableArray alloc] init];
  9. return self;
  10. }
  11. #pragma mark - public
  12. - (void)showOverlay:(UIViewController *)viewController {
  13. UIWindow* overlayWindow = [[RNNOverlayWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
  14. [_overlayWindows addObject:overlayWindow];
  15. [overlayWindow setWindowLevel:UIWindowLevelNormal];
  16. [overlayWindow setRootViewController:viewController];
  17. [overlayWindow setHidden:NO];
  18. }
  19. - (void)dismissOverlay:(UIViewController*)viewController {
  20. UIWindow* overlayWindow = [self findWindowByRootViewController:viewController];
  21. [self detachOverlayWindow:overlayWindow];
  22. }
  23. #pragma mark - private
  24. - (void)detachOverlayWindow:(UIWindow *)overlayWindow {
  25. [overlayWindow setHidden:YES];
  26. [overlayWindow setRootViewController:nil];
  27. [_overlayWindows removeObject:overlayWindow];
  28. }
  29. - (UIWindow *)findWindowByRootViewController:(UIViewController *)viewController {
  30. for (UIWindow* window in _overlayWindows) {
  31. if ([window.rootViewController isEqual:viewController]) {
  32. return window;
  33. }
  34. }
  35. return nil;
  36. }
  37. @end