2010-10-26 131 views
3

我有一个带有5个按钮的单一视图应用程序,当按下其中一个按钮时,播放器在原始视图上滑动并开始以全屏方式播放视频。iOS在全屏幕(iPad)中使用MPMoviePlayerViewController

除按全屏/最小化图标(两个对角箭头指向播放控件旁边的对方)外,所有工作都很好。按下此按钮时,五个按钮的原始视图会在视频播放器上滑动。问题是视频仍在原始视图下方播放。我真的想要消除全屏/最小化图标,但从我可以告诉,这似乎不可能。所以......我在想,我可能可以使用观察者来听全屏/最小化图标何时按下,我可以做我需要的。我无法找到任何有关如何做到这一点的坚实信息。任何帮助/方向将不胜感激。

这里是我当前的代码...

-(IBAction)playvideo { 

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Megamind" ofType:@"mov"]]; 
MPMoviePlayerViewController * playerController = [[MPMoviePlayerViewController alloc] initWithContentURL:url]; 

[self presentMoviePlayerViewControllerAnimated:(MPMoviePlayerViewController *)playerController]; 

playerController.moviePlayer.movieSourceType = MPMovieSourceTypeFile; 
[playerController.moviePlayer play]; 
[playerController release]; 
playerController=nil; 
} 

- (void)moviePlayerWillExitFullscreen:(NSNotification *)theNotification { 

MPMoviePlayerController *playerController = [theNotification object]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
      selector:@selector(moviePlayerWillExitFullscreen:) 
      name:MPMoviePlayerWillExitFullscreenNotification 
       object:nil]; 

[playerController stop]; 
[self dismissMoviePlayerViewControllerAnimated]; 
} 

回答

1

把这一行只是你MPMoviePlayer的初始化后:

[[NSNotificationCenter defaultCenter] addObserver:self 
      selector:@selector(moviePlayerWillExitFullscreen:) 
      name:MPMoviePlayerWillExitFullscreenNotification 
       object:nil]; 
+0

感谢您的回复。不幸的是,没有运气。所以我想知道1)我的观察员编码是否正确/工作,或者2)可能无法听到全屏/嵌入印刷机何时可用。任何其他想法或方向将是最受欢迎的。 – joeyd 2010-10-27 17:54:20

+0

我编辑了我的答案 – MathieuF 2010-10-27 18:46:02

+0

再次感谢您的回复。看起来像我拥有它的方式......除了didFinish之外,没有任何通知正在响应。我只是尝试了你的编辑,仍然没有运气。但是,我找到了另一种解决方案。我稍微张贴答案。 – joeyd 2010-10-27 19:03:06

0

我没有找到一个解决方案,我的知识的缺乏使我这种情况下,我不完全明白为什么它这样工作。对于没有彻底的推理我很抱歉。在我原来的代码中...... MPMoviePlayerWillExitFullscreenNotification没有响应水龙头。 MPMoviePlayerDidExitFullscreenNotification也是如此。什么回答是MPMoviePlayerPlaybackDidFinishNotification。知道MPMoviePlayerPlaybackDidFinishNotification正在工作并且也适用于全屏/嵌入印刷机,这里是工作代码。

-(IBAction)playvideo { 

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Megamind" ofType:@"mov"]]; 
MPMoviePlayerViewController * playerController = [[MPMoviePlayerViewController alloc] initWithContentURL:url]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedPlayback:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil]; 

[self presentMoviePlayerViewControllerAnimated:(MPMoviePlayerViewController *)playerController]; 

playerController.moviePlayer.movieSourceType = MPMovieSourceTypeFile; 
[playerController.moviePlayer play]; 
[playerController release]; 
playerController=nil; 
NSLog(@"playvideo"); 
} 

- (void)movieFinishedPlayback:(NSNotification*)notification { 

      MPMoviePlayerController *playerController = [notification object]; 
      [playerController pause]; 
      [self dismissMoviePlayerViewControllerAnimated]; 

} 
+0

道歉...我似乎无法得到上面的代码块保持格式化使用后编辑器。无论我如何输入它都会被打破。但这是让我的应用程序工作的代码。 – joeyd 2010-10-27 19:14:17

2

这条线正在引起你这种行为。

[self presentMoviePlayerViewControllerAnimated:(MPMoviePlayerViewController *)playerController]; 

它与您的常规presentModalViewController方法非常相似。

它以模态方式呈现Movieplayer及其视图控制器。所以这里的默认设置是

movieplayer.controlStyle = MPMovieControlStyleFullScreen 

它们是默认设置的。

所以,当你按下那些对角箭头时,它退出该模式,并给出通知。但是你必须先设置一个观察者来听取这个通知,就像你完成电影一样。

你做

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedPlayback:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil]; 

这增加了一个通知,以观察对电影完成通知。 对于退出全屏模式下新增一个多个观测是这个..

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieExitFullScreen:) name:MPMoviePlayerDidExitFullscreenNotification object:nil]; 

,你应该是很好的添加-(void) movieExitFullScreen:(NSNotification *)选择了相同的追打。希望能帮助到你。 :)

1

我想你在你想要删除它的方法中添加观察者。

你要这个

MPMoviePlayerController *playerController = [theNotification object]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
     selector:@selector(moviePlayerWillExitFullscreen:) 
     name:MPMoviePlayerWillExitFullscreenNotification 
      object:nil]; 
中的playVideo()

[[NSNotificationCenter defaultCenter] removeObserver:self 
                name:name:MPMoviePlayerWillExitFullscreenNotificationn 
                object:nil]; 

在moviePlayerWillExitFullscreen方法。