1

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

我是 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在这些方法中确保标签栏旋转行为是一致的,但这不起作用。我已经阅读了有关实现实现这两种方法的类别(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

4

2 回答 2

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];

希望这可以帮助!

于 2013-07-25T19:02:46.157 回答
0

在 iOS 6 中,方向功能发生了变化。你的设置在你的 viewControllers 中应该是这样的:

-(NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAll;
}

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationLandscapeRight;
}

-(BOOL)shouldAutorotate {
    return TRUE;
}

UIInterfaceOrientationMaskAll是所有方向,更多信息在这里

于 2013-05-31T15:10:48.597 回答