使用 UITabBarController 旋转接口

Posted

技术标签:

【中文标题】使用 UITabBarController 旋转接口【英文标题】:Rotate interface with UITabBarController 【发布时间】:2011-10-27 20:39:27 【问题描述】:

我使用新的 Xcode 4.2 创建了一个新的“Tab Bar 项目”。 使用 UITabBar 的“新”方式有所不同:Xcode 不创建 xib 文件(使用 UITabBarController),但它通过代码完成所有工作。 好的,让我们开始吧。

所以我在didFinishLaunchingWithOptions 中的代码是这样的:

UIViewController *viewController1, *viewController2, *viewController3;
UINavigationController *nav1, *nav2, *nav3;

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) 

    viewController1 = [[gemboy_iphone alloc] initWithNibName:@"vc1" bundle:nil];
    viewController2 = [[concerti_iphone alloc] initWithNibName:@"vc2" bundle:nil];
    viewController3 = [[discografia_iphone alloc] initWithNibName:@"vc3" bundle:nil];

    nav1 = [[UINavigationController alloc] initWithRootViewController:viewController1];
    nav2 = [[UINavigationController alloc] initWithRootViewController:viewController2];
    nav3 = [[UINavigationController alloc] initWithRootViewController:viewController3];


else 
  //same thing for the iPad version

self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:nav1, nav2, nav3, nil];
self.window.rootViewController = self.tabBarController;
[self.window addSubview:self.splash.view];
[self.window makeKeyAndVisible];
return YES;

而且它有效。

我的三个 .m 文件 vc1.m、vc2.m 和 vc3.m(还有我的 iPad UIViewControllers)都有这个方法

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

     return YES;

问题是当我旋转 iPhone 时,它​​只旋转状态栏,而不旋转 TabBarController!

你知道为什么吗? 谢谢

【问题讨论】:

您的三个视图控制器类被称为 gemboy_iphone、concerti_iphone 和 discografia_iphone 有点不寻常,但它们驻留在您所说的文件 vc1.m、vc2.m 和 vc3.m 中。你确定这是对的吗? XCode 不会找到这些文件,因为它们的名称与 nib 名称相似。如果它们确实包含这些类,并且您已将 nib 中的 File's Owner 类型设置为这些类,则会这样做。 【参考方案1】:

您绝对不必继承 UITabBarController,也不应该。

如果所有视图控制器都实现了 shouldAutorotateToInterfaceOrientation 并针对相同的方向返回 YES,则标签栏控制器将自动旋转。

如果您在 Xcode 4.2 中使用选项卡式应用程序模板创建一个新项目,您会看到它可以很好地自动旋转。

【讨论】:

以上是关于使用 UITabBarController 旋转接口的主要内容,如果未能解决你的问题,请参考以下文章

使用 SceneKit 的台球游戏中的后旋效果

binglinuxc(多路转接)

binglinuxc(多路转接)

binglinuxc(多路转接)

使用 glRotatef 旋转会导致翘曲

为啥我的矩阵旋转会在 OpenGL 中倒退