那么,其实3,但一个是UITextEffectsWindow
。为什么我的应用程序中有两个UIWindows,为什么第一个隐藏?
于是,我开始了一个简单的测试应用程序。
的AppDelegate:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
ViewController *controller = [[ViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller];
self.window.rootViewController = navController;
[self.window makeKeyAndVisible];
}
在的viewController我标注的观点:
self.view.tag = 999;
当我退出这个
NSLog(@"[UIApplication sharedApplication].windows = %@",[UIApplication sharedApplication].windows);
for (UIWindow* window in [UIApplication sharedApplication].windows) {
NSLog(@"tag = %d",window.rootViewController.view.tag);
}
我得到这个:
2015-04-04 08:59:44.440 SDK[45888:1495552] [UIApplication sharedApplication].windows = (
"<UIWindow: 0x7fc57371e1e0; frame = (0 0; 375 667); hidden = YES; gestureRecognizers = <NSArray: 0x7fc57371eb10>; layer = <UIWindowLayer: 0x7fc57371c2f0>>",
"<UIWindow: 0x7fc57352b0d0; frame = (0 0; 375 667); gestureRecognizers = <NSArray: 0x7fc5750115f0>; layer = <UIWindowLayer: 0x7fc573526f20>>",
"<UITextEffectsWindow: 0x7fc5750260c0; frame = (0 0; 375 667); opaque = NO; gestureRecognizers = <NSArray: 0x7fc575026fb0>; layer = <UIWindowLayer: 0x7fc575026580>>"
)
2015-04-04 09:03:33.319 SDK[46643:1499077] tag = 999
2015-04-04 09:03:33.319 SDK[46643:1499077] tag = 0
2015-04-04 09:08:11.648 SDKVevo[47379:1501367] key
2015-04-04 09:03:33.319 SDK[46643:1499077] tag = 0
正如你所看到的,有两个UIWindows,第一个是隐藏的。此外,第一个标签是999,所以这是VC实例化并设置为根。但是,那个窗户怎么被标记为隐藏?为什么有两个呢?为什么第二个窗口会作为keyWindow注销?
当我运行应用程序,我居然看到了VC我实例化,并标记为999,但日志说这是不keyWindow,这也是一个隐藏的窗口的一部分。
你是从一个故事板标准的单一视图的应用程序启动?如果是这样,故事板将为您创建一个窗口,并创建另一个窗口。 – rdelmar 2015-04-04 16:14:38