这个问题只是我问题的一部分 . 我正在为我现有的应用程序实现iOS6轮换和方向支持 .
所以我有一个ViewController,它包含一个嵌入在ViewController视图中的MPMoviePlayerController(我的应用程序需要它) . 用户可以播放视频并在嵌入视图中查看,或使用默认播放器控件单击全屏按钮,播放器进入全屏模式 .
现在,我已将视图控制器限制为仅使用iOS6提供的新旋转API支持纵向方向 .
// New Autorotation support.
- (BOOL)shouldAutorotate;
{
return NO;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
这非常有效 . ViewController仅支持纵向和用户在嵌入视图中播放影片 .
现在问题出现了,当用户进入全屏模式时 . 在全屏模式下,当我旋转模拟器/设备时,电影将继续旋转 . 当我在 shouldAutorotate
和 supportedInterfaceOrientations
中使用断点以全屏模式播放电影时旋转设备时,这两种方法仍然分别返回 NO
和 UIInterfaceOrientationMaskPortrait
,但电影仍在旋转...
为什么会这样? ....这是我的问题的一部分......第二部分是我希望当用户进入全屏模式时电影以横向模式进入 . 我希望电影播放器锁定横向模式,直到用户按下DONE按钮 .
请帮忙 ....
8 回答
您可以在
AppDelegate
中尝试以下功能:你可以为这两种模式制定条件 .
例如,如果媒体播放器是全屏幕的话
return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
否则
return UIInterfaceOrientationMaskPortrait;
我没试过,但我想,它应该适用于你的情况 .
谢谢
为清楚起见,这里是完整的代码(它全部进入你的app代理):
isFullScreen是要在AppDelegate.h中声明的BOOL
我建议改用
MPMoviePlayerViewController
. 对它进行子类化并实现supportedInterfaceOrientations
方法并返回UIInterfaceOrientationMaskLandscape
.您可能还必须实现
shouldAutorotateToInterfaceOrientation:
方法 .请参阅类参考:MPMoviePlayerViewController
Edit: 你也可以看一下这篇文章:iphone - force MPMoviePlayerController to play video in landscape mode
这耗费了我一段时间,我得到了许多不同的可怕错误,但最终我最终没有通过 MPMoviePlayerController 而是 MPMoviePlayerViewController . 在呈现之前,我只是旋转了属性的 self.playerView . 此外,我添加了 NSNotification ,它将在视频结束后返回主控制和主ViewController . 这是我如何执行它:
回调 movieFinishedCallback :如下,
这对我有用 . 希望能帮助到你 .
在项目中,选择名称项目和右侧窗口选择信息选项卡 . 在自定义ios目标属性中添加键并选择键:“初始界面方向”设置值:纵向(底部主页按钮)
对于iOS 6,您可以use this answer .
但是如果你支持<iOS 6需要不同的方法 .
您必须创建自定义导航控制器,并使用根控制器和旋转方法添加创建方法 .
它看起来像是:m file和h file .
并且在你的AppDelegate中必须调用init的方法:
在h文件中:
和
在m文件中:
用这个
它适用于ios 7
只需将此代码添加到您的视图控制器即可