在全屏模式下,防止MPMoviePlayerController旋转和缩放到纵向

时间:2012-06-27 16:10:25

标签: ios ios5 rotation orientation mpmovieplayercontroller

在iPhone 4 / 4s的iOS5应用程序中,我有一个UIViewController,其视图中添加了MPMoviePlayerController视图:

[self.view insertSubview:self.fullscreenMoviePlayerController.view atIndex:2];

UIViewController仅支持横向:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation 
{
  // Return YES for supported orientations.
  return  interfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
          interfaceOrientation == UIInterfaceOrientationLandscapeRight;

}

这正确地将旋转锁定到仅横向。但是,当我将MPVideoPlayerController设置为全屏显示时,会忽略此视频,并且视频不再受限于横向并旋转到手机所处的任何方向。

如何防止MPMoviePlayerController的视频全屏旋转到纵向方向?当手机旋转为人像时,视频不会旋转至关重要。

我尝试过继承MPVideoPlayerController并覆盖shouldAutorotateToInterfaceOrientation:,但这没有效果。

MPMoviePlayerController只是视图的一部分,所以使用MPMoviePlayerViewCotroller绝对不是一个选项。

4 个答案:

答案 0 :(得分:2)

如果您真的想避免使用MPMoviePlayerViewController,这似乎相当困难。 一个选项,即使你全屏显示也可以工作,是手动设置MPMoviePlayerController视图的框架。 (请注意,在其他iOS问题中,有时使用背景视图会产生不同的结果,但值得一试)。

MyMPMoviePlayerController.view.frame = CGRectMake(0, 0, your numbers, here);

然而,Apple在他们的文档中说控制器的框架应该设置为它的父视图的框架。

[MyMPMoviePlayerController.view setFrame: parentView.bounds];

不那么优雅的解决方案,但即使那个不合适也可以工作:

收听UIDeviceOrientationDidChangeNotification并获取电影播放器​​的视图。在其上应用transfrom,bounds和center(或框架等),使其仍适合横向视图。每次尝试旋转时基本上将其转换回来。 (这都是假设你真的无法通过shouldAutorotateToInterfaceOrientation保持旋转:)。

这里唯一的问题是,它可能会使电影保持纵向状态,但却会影响视图,这不是理想的结果。

答案 1 :(得分:0)

是的,我看到你说使用MPMoviePlayerViewController不是一个选项:

仍然......为什么不尝试制作ViewController的MPMoviePlayerViewController,否则它包含MPMoviePlayerController和视图控制器中的其他项目。关于这个的好处是MPMoviePlayerViewController已经内置了MPMoviePlayerController。你只需要引用它而不是你自己的viewController中的MPMoviePlayerController。有你可以覆盖的shouldAutorotateToInterfaceOrientation,应该为你做正确的事。

答案 2 :(得分:-1)

您可以准备两个视频。如果没有别的选择。

答案 3 :(得分:-2)

请访问仅在横向模式下显示视频的链接,默认情况下http://mobiledevelopertips.com/video/getting-mpmovieplayercontroller-to-cooperate-with-ios4-3-2-ipad-and-earlier-versions-of-iphone-sdk.html。我希望它能解决你的问题。