MPMoviePlayerViewController自定义

时间:2010-08-24 05:14:47

标签: objective-c iphone

我正在使用MPMoviePlayerViewController - 播放器控件设置为:MPMovieControlStyleFullscreen

我在使用MPMovieControlStyleFullscreen中的一些按钮时遇到问题:正向,反向和全屏(箭头指向对方的按钮)。

我想要删除前进,后退和全屏按钮,或者控制用户点按它们时的操作。

谢谢!

3 个答案:

答案 0 :(得分:9)

无法自定义Apple提供的MPMovieControlStyle值。您需要做的是关闭Apple控件(MPMovieControlStyleNone),然后创建自己的自定义控件。 Apple可以将你自己的UIViews放入层次结构中,所以你可以开始使用这样的东西:

MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL: YOUR_URL];
moviePlayer.controlStyle = MPMovieControlStyleNone;
UIView *movieView = moviePlayer.view;
[movieView addSubview: _movieControlsView];
[movieView bringSubviewToFront: _movieControlsView];

之前在代码或IB中设置了_movieControlsView

在美学上,你可以做你想做的事,但我建议坚持使用看起来像Apple的选择,以免混淆用户。对于我刚刚完成的项目,我创建了一个透明按钮,与电影播放器​​的大小完全相同。单击按钮会使用我的自定义控件淡化底部的控制栏。如果未单击其中一个控件,则控制栏会在几秒钟后再次退出。

答案 1 :(得分:3)

首先,MPMoviePlayerController与MPMoviePlayer * View * Controller略有不同,因此在转换iOS 4.3+环境中构建的应用程序时,其中一些答案会导致问题。

我使用MPMoviePlayerController构建了一些应用程序,这些应用程序在iOS 3.2中构建时运行良好。当我使用XCode 3.2.6(iOS 4.3)重建它时,视频甚至不能在iPhone上播放。我自从修复了通过将MPMoviePlayerController实例添加到subView,然后在fullScreenMode中使用movplayer呈现模态(Player是UIViewController):

//from didSelectRowAtIndexPath

Vid *selected = [items objectAtIndex:position];

player = [[Player alloc] init]; 
movplayer = [[MPMoviePlayerController alloc] initWithContentURL:selected.vidURL];
movplayer.view.frame = player.view.bounds;
movplayer.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight |
UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | 
UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin;

[player.view addSubview:movplayer.view];
[self presentModalViewController:player animated:YES];
[movplayer setFullscreen:YES animated:NO];
[movplayer play];
[player release];

//movplayer is released inside - (void)exitedFullscreen:(NSNotification*)notification 

这是因为旋转时UINavigationBar被切断了一半

当我进入应用程序的iPad版本时,模态选项在美学上不会起作用。在全屏模式下旋转时,它还有UISplitViewController导航条和工具栏的一半切断。所以我尝试实现MPMoviePlayerViewController而不是MPMoviePlayerController。通过此转换,XCode在尝试设置时给出了错误:

movplayer.controlStyle = MPMovieControlStyleEmbedded;

使用MPMoviePlayerViewController执行此操作的正确方法是:

movplayer.moviePlayer.controlStyle = MPMovieControlStyleEmbedded;

当玩家被添加为子视图时,捏合手势将平滑地在fullScreen和parentView(player.view.bounds)的大小之间切换玩家,并保留父母的工具栏和导航栏。 / p>

//iPad version with a view (viewForMovie) inside the DetailViewController
movplayer = [[MPMoviePlayerViewController alloc] initWithContentURL:[current vidURL]];
movplayer.moviePlayer.controlStyle = MPMovieControlStyleEmbedded;
movplayer.view.backgroundColor = [UIColor clearColor];
movplayer.view.frame = viewForMovie.bounds;
[viewForMovie addSubview:movplayer.view];

因此,这两个示例显示了那些想要将iPhone或iPad应用程序转换为较新iOS版本的人的一些解决方法。

答案 2 :(得分:0)

尝试将MPMovieControlStyle对象的MPMoviePlayerController设置为MPMovieControlStyleNone