1// Copyright 2015-present 650 Industries. All rights reserved. 2 3#import "EXDevMenuWindow.h" 4#import "EXDevMenuViewController.h" 5#import "EXDevMenuManager.h" 6 7@interface EXDevMenuWindow () 8 9@property (nonatomic, strong) EXDevMenuViewController *viewController; 10 11@end 12 13@implementation EXDevMenuWindow 14 15#pragma mark - UIWindow 16 17- (instancetype)init 18{ 19 if (self = [super init]) { 20 self.backgroundColor = [UIColor clearColor]; 21 self.bounds = [[UIScreen mainScreen] bounds]; 22 self.hidden = YES; 23 } 24 return self; 25} 26 27- (void)makeKeyAndVisible 28{ 29 [super makeKeyAndVisible]; 30 31 // `makeKeyAndVisible` apparently doesn't call `hidden` setter so make sure the root view is attached. 32 [self attachRootViewController]; 33} 34 35- (void)setHidden:(BOOL)hidden 36{ 37 [super setHidden:hidden]; 38 39 // Reset `rootViewController` so it gets appearing/disappearing events that we depend on. 40 if (hidden) { 41 [self detachRootViewController]; 42 } else { 43 [self attachRootViewController]; 44 } 45} 46 47#pragma mark - internal 48 49- (void)attachRootViewController 50{ 51 if (!_viewController) { 52 _viewController = [EXDevMenuViewController new]; 53 } 54 self.rootViewController = _viewController; 55} 56 57- (void)detachRootViewController 58{ 59 self.rootViewController = nil; 60} 61 62@end 63