使用Overlay视图制作MPMoviePlayer的更好方法

时间:2011-04-26 10:36:18

标签: iphone ios4 ipad mpmovieplayercontroller mpmovieplayer

当我们使用MPMoviePlayer(在自定义UIViewController中)创建应用程序并在电影播放器​​上使用覆盖UIViewController时,有什么更好的方法: - 使用self.view.presentModalView ...或self.view.addSubView在播放器中加载电影... 或者还有其他更好的方法。我现在使用模态视图,一切正常,但我必须实现一些自定义旋转。我正在寻找更明确的方法来做到这一点。

好吧也许更多细节。在iPhone应用程序中,我添加播放器,如模态视图,并添加叠加视图,这是有效的。但这是通用应用程序,它在iPad上的工作方式与在iPhone上的工作方式相同。在ipad splitView中,我的播放器处于细节方面(非完全屏幕),当我双击播放器时它会全屏显示。现在玩家是关键窗口。这是最大的问题。我试图添加叠加视图作为子视图和模态视图,我做了它但是叠加层不知道设备方向,我必须转换叠加元素,这是我想要避免的。有没有办法检测该视图的旋转?

3 个答案:

答案 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];

实际上它太容易了!只需选择控制样式为无,并在播放器视图中添加低不透明度视图。

相关问题