0

我有一个 iPhone 应用程序,其根视图控制器 (VC) 为 UITabBarController(设置为纵向),带有多个选项卡,其中一个是简单的 UIViewController。在那个 UIViewController 中是一个按钮 - “播放视频”,单击它会打开视频的模态视图(并自动开始播放视频)。视频视图是 UIViewController 中的 UIWebView。我一直试图让 Web View 的 VC 将方向更改为横向,但没有任何运气。

我环顾四周并了解到,如果您有一个标签栏或导航控制器,所有子 VC 将与父级具有相同的方向 - 这是有道理的。这就是我制作 web 视图的 VC 模式的原因,希望这是一种解决方向问题的方法。

我的问题是:这是否准确 - 使用模式不需要 Web 视图 VC 是纵向的并且可以响应 shouldAutorotateToInterfaceOrientation 方法(即使我还不能让它工作)?

顺便说一句,使用 iOS 6。

提前致谢。

4

2 回答 2

1

试试这个。只需在摘要屏幕中设置肖像,然后在应用程序委托中,实现此:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
    return UIInterfaceOrientationMaskAll;
}

在标签栏控制器中(并且没有其他旋转代码):

-(BOOL)shouldAutorotate {
    return NO;
}

最后,在模态视图控制器中:

-(BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAll;
}
于 2012-12-08T02:05:06.377 回答
1

显然在 ios6 及更高版本中,旋转的工作方式是不同的。所以你要做的是以下

  1. 在您的 .plist 中支持所有 4 个方向。
  2. 子类化 UITabBarController(例如:CustomTabBarController)
  3. 在 CustomTabBarController 中放入以下代码行

    -(NSUInteger)supportedInterfaceOrientations
    {
        return UIInterfaceOrientationMaskPortrait;
    }
    
    
    - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
    {
        return UIInterfaceOrientationPortrait;
    }
    
  4. 在您的应用程序委托或您正在初始化 UITabBarController 的任何地方,将这些实例替换为 CustomTabBarController 实例。

  5. 在您的模态控制器中放置线条

    - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
     {
        return UIInterfaceOrientationLandscapeLeft;
    }
    
    -(BOOL)shouldAutorotate{
        return NO;
    
    }
    

这一切都应该奏效。

显然,我发现的诀窍是,UITabBarController 不会听你的指令。它将支持您在 .plist 中提到的所有方向。

因此,您必须对其进行子类化。

我尝试执行上述所有操作,并且效果很好。请让我知道,如果您愿意,我可以将代码发送给您。

于 2012-12-08T02:51:25.623 回答