当我们使用MPMoviePlayer(在自定义UIViewController中)创建应用程序并在电影播放器上使用覆盖UIViewController时,有什么更好的方法: - 使用self.view.presentModalView ...或self.view.addSubView在播放器中加载电影... 或者还有其他更好的方法。我现在使用模态视图,一切正常,但我必须实现一些自定义旋转。我正在寻找更明确的方法来做到这一点。
好吧也许更多细节。在iPhone应用程序中,我添加播放器,如模态视图,并添加叠加视图,这是有效的。但这是通用应用程序,它在iPad上的工作方式与在iPhone上的工作方式相同。在ipad splitView中,我的播放器处于细节方面(非完全屏幕),当我双击播放器时它会全屏显示。现在玩家是关键窗口。这是最大的问题。我试图添加叠加视图作为子视图和模态视图,我做了它但是叠加层不知道设备方向,我必须转换叠加元素,这是我想要避免的。有没有办法检测该视图的旋转?
答案 0 :(得分:6)
简单而优雅的解决方案:
请勿使用“真实”全屏模式,而是将MPMoviePlayerController的视图缩放到屏幕填充大小 - MPMoviePlayerController.view.frame = CGRectMake(0.0f, 0.0f, 768.0f, 1024.0f);
。将MPMoviePlayerController
的{{1}}置于允许轮换的常规view
UIViewController
之上(addSubview)。保持您的自定义界面视图在MPMoviePlayerController的视图(addSubview)和presto之上,无论您是否以“全屏”方式运行它,都将获得正确旋转的视频播放器。
答案 1 :(得分:0)
我找到了一个解决方案,但我不是很自豪,因为我认为有更好的方法,但这个解决方法有效:
- 在项目中,我有一个包含一些全局数据的单例类。
- 首先调用应用程序启动详细信息视图(UISplitView)willAnimateRotationToInterfaceOrientation
方法。在这里,我获得当前的方向并将其存储在单件类中。
- 稍后当我在播放器顶部添加叠加层时,我从单例中读取数据并转换叠加元素。
答案 2 :(得分:0)
根据上面我做了类似的事情:
mp = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"]];
mp.movieSourceType = MPMovieSourceTypeStreaming;
mp.view.frame = CGRectMake(0.0f, 0.0f, 1024.0f, 768.0f);
[self.view addSubview:mp.view];
mp.controlStyle = MPMovieControlStyleNone;
[self.view addSubview:self.myOverlay];
[mp play];
实际上它太容易了!只需选择控制样式为无,并在播放器视图中添加低不透明度视图。