UITabBarController和旋转iOS6

时间:2013-05-27 14:35:25

标签: ipad ios6 rotation uitabbarcontroller autorotate

美国人的阵亡将士纪念日快乐!

我是iOS和Objective-C编程的新手;几个星期前,我继承了一款专为iOS 5设计的iPad应用程序开发。我现在除了iOS 6中的旋转外,其他所有工作都有效。我知道iPad应用程序应该默认旋转到每个方向(这就是我希望),但我的不是。在iOS 5中,一切都完美旋转,我可以让我的启动画面在iOS 6中完美旋转,但就是这样。我无法让活动(一旦你点击启动画面)正确旋转。

我搜索了stackoverflow和其他网站以找出我必须做的事情,所以我知道在任何特定的ViewController中实现-(BOOL)shouldAutorotate-(NSUInteger)supportedInterfaceOrientations来控制该视图的方向行为。我已经读过在一个VC中具有不同的旋转行为会影响整个应用程序。所以我确保我能找到的每个VC现在都会实现这两个iOS 6方法分别返回YESUIInterfaceOrientationMaskAll。那没用。我读到了在这些方法中返回self.tabBarController.shouldAutorotateself.tabBarController.supportedInterfaceOrientations以确保tabbar旋转行为是一致的,但这不起作用。我已经阅读了关于实现一个实现这两种方法的类别(UITabBarController + autoRotate.m和.h),但是没有用。我已经读过关于tabBarController的子类化,我认为我的代码就是这样:在我的appDelegate中,我调用

[myWindow setRootViewController:activityViewController]

其中activityViewController是类BicycleFamilyAcitivityViewController的一个实例,来自

@interface BicycleFamilyActivityViewController : UIViewController <UITabBarControllerDelegate>

当我使用iOS 6模拟器调查成功启动屏幕旋转期间调用的内容时,我注意到正在调用BicycleFamilyAcitivityViewController中的这两个实现方法(实际上是两次),而-(void)willAnimateRotationToInterfaceOrientation:duration也是如此。当我在查看活动时尝试旋转(点击启动画面后),这两种方法只调用一次,并且不调用-(void)willAnimateRotationToInterfaceOrientation:duration。在这两种情况下,都会调用appDelegate的-(NSUInteger)application:supportedInterfaceOrientationsForWindow方法。

有关如何让旋转在整个应用程序中工作的任何建议吗?即使它只是指向我尚未看到(或完全理解)StackOverflow的答案,我将非常感激。

非常感谢提前!

伯尼

**在项目中查找VC类时,我确保考虑实现iOS 5的旋转方法的任何类:-(BOOL)shouldAutorotateToInterfaceOrientation:interfaceOrientation

2 个答案:

答案 0 :(得分:0)

在iOS 6中,Orientation功能已更改。您的设置在viewControllers中应如下所示:

-(NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAll;
}

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationLandscapeRight;
}

-(BOOL)shouldAutorotate {
    return TRUE;
}

UIInterfaceOrientationMaskAll是所有方向,更多信息here

答案 1 :(得分:0)

内部有人想出了这个问题。我想我会发布答案来帮助那些有类似困境的人。

我曾尝试过的(除其他事项外)是:将我的appDelegate类中的UIWindow设置为我的UIViewController子类(BicycleFamilyAcitivityViewController)的实例。在我的appDelegate中,我有:

[myWindow setRootViewController:activityViewController];

其中activityViewController是UIViewController的子类的实例。

但我应该通过委托创建一个额外的UIWindow,然后在构建我的TabBarController时将TabBarController(tbc)指定为它的根VC。在我的主视图控制器类中,我有一个buildTabBarController函数。因此,该函数中的这两行允许我的循环工作:

UIWindow *keyWindow = [[[UIApplication sharedApplication] delegate] window];
[keyWindow setRootViewController:tbc];

希望这有帮助!