以前も同様の質問をしましたが、今はさらに作業を進めて、より洗練された質問をしています。
applicationDidFinishLaunching: に次のコードがあり、3 つのビューを作成し、それらをウィンドウのサブビューとして追加します。
- (void)applicationDidFinishLaunching:(UIApplication *)application {
GLViewController* controller = [[GLViewController alloc] init];
self.glViewController = controller;
[controller release];
glView = [[GLView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
glView.controller = glViewController;
[glView stopAnimation];
[window addSubview:glView];
invisibleView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
invisibleView.alpha = 1.0;
invisibleView.tag = 2;
// By the definition of UIViewAutoresizing, 0x3F corresponds to resizing in every direction.
invisibleView.autoresizingMask = 0x3F;
obstaclesViewController = [[ObstaclesViewController alloc] init];
obstaclesViewController.view = invisibleView;
[window addSubview:invisibleView];
viewController = [[GazeIntroViewController alloc] initWithNibName:@"GazeIntroViewController" bundle:[NSBundle mainBundle]];
[viewController.view setFrame:[[UIScreen mainScreen] bounds]];
[window addSubview:viewController.view];
[window bringSubviewToFront:viewController.view];
[window makeKeyAndVisible];
NSLog(@"window: %@", [window description]);
NSLog(@"window subviews: %@", [[window subviews] description]);
}
アプリは横向きでのみ動作するはずなので、横向きで起動するように (plist で) 設定しました。しかし、最後に追加されたサブビュー (GazeIntroViewController) は 90 度回転して表示されます。(デバイスがまだ縦向きであるかのように)。
私を本当に困惑させているのは、最初と2番目のビューが問題ないように見えることです。invisibleView を追加する中央のブロックを取り出すと、GazeIntroViewController も正しく表示されます。NSLogs から、正しく表示されるビューには自動的に変換 ([0, 1, -1, 0, 0, 0])が適用されていることがわかりますが、この変換が一部のビューに適用される理由がわかりません親がすべてのウィンドウである場合は、 other ではありません。
invisibleView が追加されていない場合の出力:
2011-07-31 21:00:51.271 GazeDemo[53515:207] window: <UIWindow: 0xa713ab0; frame = (0 0; 768 1024); autoresize = RM+BM; layer = <CALayer: 0xa713b90>>
2011-07-31 21:00:51.277 GazeDemo[53515:207] window subviews: (
"<GLView: 0x68bc350; frame = (0 0; 768 1024); layer = <CAEAGLLayer: 0x68bc4e0>>",
"<UIView: 0x68c3ce0; frame = (0 0; 748 1024); transform = [0, 1, -1, 0, 0, 0]; autoresize = LM+W+RM+TM+H+BM; layer = <CALayer: 0x68c2150>>"
)
invisibleView が追加されたときの出力:
2011-07-31 21:11:05.489 GazeDemo[53710:207] window: <UIWindow: 0x689d4d0; frame = (0 0; 768 1024); autoresize = RM+BM; layer = <CALayer: 0x689d5b0>>
2011-07-31 21:11:05.496 GazeDemo[53710:207] window subviews: (
"<GLView: 0x689cf50; frame = (0 0; 768 1024); layer = <CAEAGLLayer: 0x689dcb0>>",
"<UIView: 0x68a05f0; frame = (0 0; 748 1024); transform = [0, 1, -1, 0, 0, 0]; autoresize = LM+W+RM+TM+H+BM; tag = 2; layer = <CALayer: 0x68a06c0>>",
"<UIView: 0x6b484b0; frame = (0 0; 768 1024); autoresize = LM+W+RM+TM+H+BM; layer = <CALayer: 0x6b4bad0>>"
)