4

在以前的 iOS 版本中,我们的视频会自动旋转,但在 iOS 6 中,情况不再如此。我知道 presentMoviePlayerViewControllerAnimated 之前就是为此而设计的,但我怎么能告诉 MPMoviePlayerViewController 自动旋转呢?

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

3 回答 3

10

在 appdelegate.m 中:

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

有点hack,但效果很好......

于 2013-04-12T12:20:34.297 回答
6

我刚刚遇到了同样的问题。James Chen 的解决方案是正确的,但我最终做了一些更简单但也有效的事情 - 在我的应用程序委托中覆盖 application:supportedInterfaceOrientationsForWindow 并返回 allButUpsideDown 如果我的 rootView 控制器以模态方式呈现 MPMoviePlayerViewController。不可否认,这是一个 hack,可能并不适合所有情况,但让我不必更改所有视图控制器:

- (NSUInteger) application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
    return [rootViewController.modalViewController isKindOfClass:MPMoviePlayerViewController.class ] ? UIInterfaceOrientationMaskAll : UIInterfaceOrientationMaskAllButUpsideDown;
}
于 2012-11-01T18:48:26.577 回答
4

这不限于MPMoviePlayerViewController. 从 iOS 6 开始,自动旋转已更改。请参阅iOS 6 中的 Autorotate 有奇怪的行为

要使您的应用程序表现得像 iOS 6 之前的版本,您必须使应用程序支持所有方向(UISupportedInterfaceOrientations在 plist 中编辑),然后对于不支持旋转的所有其他视图控制器,重写此方法以返回 NO:

- (BOOL)shouldAutorotate {
    return NO;
}

默认情况下MPMoviePlayerViewController支持所有方向,所以这应该足以让它工作。

于 2012-09-26T02:45:17.437 回答