2

我有以下视图层次结构:

UITabBarController
 |
 UINavigationController
 |         |
 |         UIViewController (only supports Portrait rotation)
 |
 UINavigationController
 |         |
 |         UIViewController (only supports Portrait rotation)
 |
 UINavigationController
 |         |
 |         UIViewController (only supports Portrait rotation)
 |         |
 |         UIViewController (has UIWebView with movie in it)
 |
 UINavigationController
           |
           UIViewController (only supports Portrait rotation)

现在的问题是,当我显示包含电影的 UIWebView 并且用户按下“播放”时,全屏媒体播放器会按预期打开。但是,我无法旋转电影,​​因为父 UIViewController 仅支持纵向(我对此进行了测试)。当我为父视图控制器启用横向时,它可以工作,但在这种情况下,我在仍处于横向模式时遇到了用户切换选项卡的问题(另请参阅我昨天发布的这个问题:更改选项卡时忽略自动旋转

有人对如何解决这个问题有任何想法吗?一方面,我想让用户能够旋转视频,但另一方面,重写所有其他 viewController 以支持横向似乎需要付出太多努力才能获得优势。

4

2 回答 2

0

考虑一种不同的方法:与其将包含电影的 UIWebView 呈现为整个选项卡控制器层次结构中的 UIViewController,这会将您与整个旋转问题联系起来,而是尝试用完全不同的 UIViewController 替换您的顶级视图控制器(UITabBarController) (包含 UIWebView)。

当您想退出全屏电影模式时,再次将 UITabBarController 恢复为顶级视图控制器。NB 不要忘记在切换时删除“旧”视图控制器——当 UIWindow 有多个子视图时,它会变得非常不开心,并且不会发送自动旋转消息等。

我见过应用程序在遇到这种自转障碍时会使用这样的策略。

这种策略可能看起来有点“脱胶”,您可能需要在切换的更精细方面做一些摆弄,但值得一看。

于 2011-03-15T10:58:17.943 回答
0

您可以在视图控制器中发送通知,说明其他视图控制器需要旋转,以便它们向所有方向返回 YES。当您离开视图控制器时,您会发送另一个不再需要的通知。使用这种方法,您只能进行自动旋转在您想要的视图中,一旦您离开这些视图,您就会将其停用。

在我的应用程序中,我在需要自动旋转但在其他视图控制器中不需要的 Web 视图中使用这种方法。

  • (void)viewWillAppear:(BOOL)动画{

    [超级viewWillAppear:动画];

    NSNotification *autoRotationNotification = [NSNotification notificationWithName:kShouldAutoRotateNotification object:[NSNumber numberWithBool:YES]]; [[NSNotificationCenter defaultCenter] postNotification:autoRotationNotification];

}

  • (void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated];

    NSNotification *autoRotationNotification = [NSNotification notificationWithName:kShouldAutoRotateNotification object:[NSNumber numberWithBool:NO]]; [[NSNotificationCenter defaultCenter] postNotification:autoRotationNotification]; }

于 2012-05-11T07:10:24.453 回答