Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 防止MPMoviePlayerController在全屏显示时旋转和缩放到纵向_Ios_Ios5_Rotation_Orientation_Mpmovieplayercontroller - Fatal编程技术网

Ios 防止MPMoviePlayerController在全屏显示时旋转和缩放到纵向

Ios 防止MPMoviePlayerController在全屏显示时旋转和缩放到纵向,ios,ios5,rotation,orientation,mpmovieplayercontroller,Ios,Ios5,Rotation,Orientation,Mpmovieplayercontroller,在iPhone 4/4s的iOS5应用程序中,我在其视图中添加了一个带有MPMoviePlayerController视图的UIViewController: [self.view insertSubview:self.fullscreenMoviePlayerController.view atIndex:2]; UIViewController仅支持横向方向: - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrient

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

[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只是视图的一部分,因此使用mpmovieplayervicewcotroller绝对不是一个选项。

请访问该链接。默认情况下,该链接仅在横向模式下显示视频。我希望它能解决你的问题

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

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

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

[MyMPMoviePlayerController.view setFrame: parentView.bounds];
不太优雅的解决方案,但即使该解决方案不起作用,也可能有效的解决方案是:

收听UIDeviceOrientationIDChangeNotification并观看电影播放器。在其上应用变换、边界和中心(或框架等),使其仍然适合于横向视图。本质上,每次尝试旋转时,都会将其变换回原来的位置。(这都是假设您确实无法阻止它以shouldAutorotateToInterfaceOrientation:旋转)


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

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


不过…为什么不尝试使您拥有的ViewController的MPMoviePlayerController包含MPMoviePlayerController和视图控制器中的其他项。这方面的好处在于MPMoviePlayerController已经内置了MPMoviePlayerController。您只需参考它,而不是您自己的viewController中的MPMoviePlayerController。它具有您可以覆盖的shouldAutorotateToInterfaceOrientation,并且应该为您做正确的事情。

您到底需要什么?始终以横向模式播放视频需要什么?是的。我需要视频只以横向方式显示,无论是全屏还是全屏。你是在iPad还是iPhone上工作?为什么不使用AVPlayer并将AVPlayerLayer添加到显示视图中,而不是在MPVideoPlayerController上胡闹?@StevenVeltema如果我开始时就知道MPMoviePlayerController有多糟糕,我会这样做,而且我会做的在未来的项目中肯定会这样做,但我已经做到了这一点,其他的一切都很好(经过了大量的工作之后),因此,我不愿意放弃所有这些,不得不从头开始构建所有UI。此链接与我的问题无关,涉及iOS3。但您不需要查看SDK,只需查看您正在self.view上插入的MoviepLyer视图。只需尝试modalviewcontroller,就像示例中所示,您可以完成您的任务。谢谢你的回答,我只是想帮你。我投了你的反对票,因为1。你没有回答问题,只是添加了一个链接。2.链接与我的问题无关。这根本不能回答我的问题。谢谢,这是两个很好的攻击计划。我以前也走过类似的路,虽然很混乱,但看起来这个问题没有干净的解决方案。只是一个想法。。。如果MPMoviePlayerController存储在引用中的某个位置,则可以将其添加到任意多个视图中。然后,您可以侦听MPMoviePlayerwillerInterfullScreen通知,并显示另一个视图/UIViewController(已禁用旋转),其中添加了您的电影播放器(或者可能是moviePlayer.view),但不允许旋转。然后倾听相反的通知,然后关闭您的演示。看起来这是可能的,但我能找到的最好的方法是自己获取设备旋转通知,然后在必要时应用旋转(并可能设置锚定点,使其围绕中心旋转…)。显然,忽略那些你不想旋转的对象。通过接收有关全屏的通知,您将被允许根据电影的状态分别定义此行为。我真的很困惑。我想我应该查看一下视图层次结构,我可以看到旋转的根在MPMoviePlayerController视图的上方。它是UINavigationTransitionView的一个实例。层次结构如下所示:MPMovieView[MyMPMoviePlayerController.view setFrame: parentView.bounds];