仅在纵向模式下强制UINavigationController

时间:2014-01-07 08:11:24

标签: ios uinavigationcontroller rotation autorotate

我有一个MovieViewController作为UINavigationController的孩子。我使用MPMoviePlayerViewController播放从MovieViewController触发的视频流,在该视频视图中,它可以将方向更改为横向或纵向。我只需要点击完成按钮,MovieViewController再次转为肖像模式,因为它只支持肖像模式。

这是代码

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return UIInterfaceOrientationMaskPortrait;
}

- (NSUInteger) supportedInterfaceOrientations {
    return(UIInterfaceOrientationMaskPortrait);
}

- (BOOL) shouldAutorotate {
    return FALSE;
}

但是当我点击完成按钮时,它会崩溃, “preferredInterfaceOrientationForPresentation必须返回支持的接口方向!”

注意:我以模态方式调用了moviePlayer。

NSURL *movieURL = [NSURL URLWithString:@"URL"];
player =[[MyMoviePlayerViewController alloc]
                                      initWithContentURL:movieURL];
[self presentViewController:player animated:YES completion:nil];

所以在调用它之后,会有一个按钮来解除视图。问题是当我以横向模式观看电影并点击完成按钮时,它崩溃了,因为我只有一个支持的界面(肖像)。

2 个答案:

答案 0 :(得分:2)

您需要做一些事情。

首先,删除此行 - 已弃用。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
   return UIInterfaceOrientationMaskPortrait;
}

其次,继承您的UINavigationController并添加以下代码:

- (NSUInteger)supportedInterfaceOrientations 
{
    NSUInteger orientation = UIInterfaceOrientationMaskPortrait;
    if ([self.navigationController.visibleViewController isMemberOfClass:[MPMoviePlayerViewController class]]) {
        orientation = UIInterfaceOrientationMaskAll;
    }
    return orientation;
}

- (BOOL)shouldAutorotate 
{
    return YES;
}

在这段代码中,我假设您在MovieViewController上推送MPMovieController(通过navigationController)。

答案 1 :(得分:0)

感谢所有答案,但这是解决我上述所有问题的代码。

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationPortrait;
}