gpt4 book ai didi

ios - 什么时候 View 会根据它们的父 View 自动转换?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:46:43 30 4
gpt4 key购买 nike

我之前问过类似的问题,但现在我做了更多的工作,并且有一个更细化的问题。

我的 applicationDidFinishLaunching: 中有以下代码,创建 3 个 View 并将它们添加为窗口的 subview :

- (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 中)设置为以横向模式启动,它确实如此。但是最后添加的 subview (GazeIntroViewController) 似乎旋转了 90 度。 (就好像设备仍然是纵向的一样)。

真正让我感到困惑的是,第一个和第二个 View 似乎还不错。如果我把添加 invisibleView 的中间 block 去掉,那么 GazeIntroViewController 也会出来。从 NSLogs 中,我可以看到正确显示的 View 自动应用了转换([0, 1, -1, 0, 0, 0]),但我不明白为什么要应用此转换对于某些 View 而不是其他 View ,当它们的父级是所有 View 的窗口时。

不添加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>>"
)

最佳答案

所有应用程序仅以纵向模式启动,然后在 UIViewController 的 autoRotate 方法中变为横向。

所以,我们不能改变 MainWindow.xib 的方向。这就是为什么如果您要添加一个 View 作为主窗口的 subview ,它将始终处于纵向模式并且您认为它旋转了 90 度。

尝试在 rootViewController.view 上添加 subview ,例如:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

// Some code
[self.window.rootViewController.view addSubview:YourView];
//some code
}

如果你正在使用导航 Controller ,那么使用这个:;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

// Some code
[self.navigationController.topViewController.view addSubview:YourView];
//some code
}

关于ios - 什么时候 View 会根据它们的父 View 自动转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6894174/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com