iOS 6 MPMoviePlayerViewController和presentMoviePlayerViewControllerAnimated Rotation

时间:2012-09-26 01:58:36

标签: ios iphone ios6 iphone-5

在之前的iOS版本中,我们的视频会自动旋转,但在iOS 6中则不再如此。我知道presentMoviePlayerViewControllerAnimated之前的设计是为了做到这一点,但我如何告诉MPMoviePlayerViewController自动旋转?

MPMoviePlayerViewController *moviePlayer = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
[self presentMoviePlayerViewControllerAnimated:moviePlayer];

4 个答案:

答案 0 :(得分:10)

在appdelegate.m中:

- (NSUInteger) application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
    if ([[self.window.subviews.lastObject class].description isEqualToString:@"MPMovieView"]) {
        return UIInterfaceOrientationMaskAllButUpsideDown;
    }
    else {
        return UIInterfaceOrientationMaskPortrait;
    }
}

有点黑客,但效果很好......

答案 1 :(得分:6)

我遇到了同样的问题。 James Chen的解决方案是正确的,但我最终做了一些更简单的工作 - 覆盖应用程序:supportInterfaceOrientationsForWindow在我的app委托中,并返回allButUpsideDown如果我的rootView控制器是模态呈现MPMoviePlayerViewController。不可否认,这可能并不适合所有情况,但是我不得不改变所有视角控制器:

- (NSUInteger) application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
    return [rootViewController.modalViewController isKindOfClass:MPMoviePlayerViewController.class ] ? UIInterfaceOrientationMaskAll : UIInterfaceOrientationMaskAllButUpsideDown;
}

答案 2 :(得分:4)

这不仅限于MPMoviePlayerViewController。从iOS 6开始,自动旋转已经改变。见Autorotate in iOS 6 has strange behaviour

要使您的应用程序在iOS 6之前运行,您必须使应用程序支持所有方向(在plist中编辑UISupportedInterfaceOrientations),然后对于不支持旋转的所有其他视图控制器,覆盖此方法返回NO:

- (BOOL)shouldAutorotate {
    return NO;
}

默认情况下,MPMoviePlayerViewController支持所有方向,因此这应足以使其正常工作。

答案 3 :(得分:1)

我看到在iOS 6中有很多类似的应用方向帖子。但总的来说,解决方案非常简单: https://stackoverflow.com/a/13279778/691660