react-native-navigation的迁移库

RNNOverlayManager.m 1.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #import "RNNOverlayManager.h"
  2. #import "RNNErrorHandler.h"
  3. #import "RNNOverlayWindow.h"
  4. @implementation RNNOverlayManager {
  5. NSMutableDictionary* _overlayDict;
  6. RNNStore* _store;
  7. RNNOverlayWindow *_overlayWindow;
  8. UIWindow *_previousWindow;
  9. }
  10. - (instancetype)initWithStore:(RNNStore *)store {
  11. self = [super init];
  12. _overlayDict = [[NSMutableDictionary alloc] init];
  13. _store = store;
  14. return self;
  15. }
  16. #pragma mark - public
  17. - (void)showOverlay:(RNNRootViewController *)viewController completion:(RNNTransitionCompletionBlock)completion {
  18. [self cacheOverlay:viewController];
  19. _previousWindow = [UIApplication sharedApplication].keyWindow;
  20. _overlayWindow = [[RNNOverlayWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
  21. [_overlayWindow setWindowLevel:UIWindowLevelNormal];
  22. [_overlayWindow setRootViewController:viewController];
  23. [_overlayWindow makeKeyAndVisible];
  24. completion();
  25. }
  26. - (void)dismissOverlay:(NSString*)componentId completion:(RNNTransitionCompletionBlock)completion rejection:(RNNTransitionRejectionBlock)reject {
  27. RNNRootViewController* viewController = [_overlayDict objectForKey:componentId];
  28. if (viewController) {
  29. [self detachOverlayWindow];
  30. [self removeCachedOverlay:viewController];
  31. completion();
  32. } else {
  33. [RNNErrorHandler reject:reject withErrorCode:1010 errorDescription:@"ComponentId not found"];
  34. }
  35. }
  36. #pragma mark - private
  37. - (void)cacheOverlay:(RNNRootViewController*)viewController {
  38. [_overlayDict setObject:viewController forKey:viewController.componentId];
  39. }
  40. - (void)removeCachedOverlay:(RNNRootViewController*)viewController {
  41. [_overlayDict removeObjectForKey:viewController.componentId];
  42. [_store removeComponent:viewController.componentId];
  43. }
  44. - (void)detachOverlayWindow {
  45. [_overlayWindow setRootViewController:nil];
  46. _overlayWindow = nil;
  47. [_previousWindow makeKeyAndVisible];
  48. _previousWindow = nil;
  49. }
  50. @end