全屏使用MPMoviePlayerViewController的iOS(iPad)
我有一个带有5个按钮的单视图应用程序,当按下其中一个按钮时,播放器会在原始视图上向上滑动,并开始全屏播放视频(应该如此) 除了按下全屏/最小化图标(播放控件旁边的两个互相指向的对角箭头)外,所有操作都非常有效。按下此按钮时,带有五个按钮的原始视图将在视频播放器上向上滑动。问题是视频仍在原始视图下播放。我真的很想取消全屏/最小化图标,但从我看来,这似乎是不可能的。所以我在想,当按下全屏/最小化图标时,我可能可以使用观察者收听,我可以做我需要做的事情。我只是找不到任何关于如何做到这一点的可靠信息。任何帮助/指导都将不胜感激 这是我当前的代码全屏使用MPMoviePlayerViewController的iOS(iPad),ipad,video,ios4,Ipad,Video,Ios4,我有一个带有5个按钮的单视图应用程序,当按下其中一个按钮时,播放器会在原始视图上向上滑动,并开始全屏播放视频(应该如此) 除了按下全屏/最小化图标(播放控件旁边的两个互相指向的对角箭头)外,所有操作都非常有效。按下此按钮时,带有五个按钮的原始视图将在视频播放器上向上滑动。问题是视频仍在原始视图下播放。我真的很想取消全屏/最小化图标,但从我看来,这似乎是不可能的。所以我在想,当按下全屏/最小化图标时,我可能可以使用观察者收听,我可以做我需要做的事情。我只是找不到任何关于如何做到这一点的可靠信息。任
-(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];
}
将这一行放在MPMoviePlayer的init之后:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlayerWillExitFullscreen:)
name:MPMoviePlayerWillExitFullscreenNotification
object:nil];
我确实找到了一个解决办法,但由于缺乏知识,我无法完全理解它为什么会以这种方式工作。我为没有进行透彻的推理而道歉。在我的原始代码中。。。MPMoviePlayerWillexitFullScreen通知未响应点击。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];
}
这条线导致了你的这种行为
[self presentMoviePlayerViewControllerAnimated:(MPMoviePlayerViewController *)playerController];
它与常规的presentModalViewController方法非常相似
它以模态的方式呈现电影播放器及其视图控制器。所以这里的默认设置是
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*)
选择器之后,您应该可以很好地使用它了。希望有帮助。:) 我认为您正在将观察者添加到要删除它的方法中
你想要这个
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];
在MoviePlayerwillexit全屏方法中。谢谢您的回复。不幸的是,没有运气。因此,我想知道1)我的观察者是否编码正确/工作正常,或者2)可能无法收听全屏/嵌入式按键。任何其他想法或方向都是非常受欢迎的。再次感谢您的回复。看起来像是我的方式。。。除了didFinish之外,所有通知都没有响应。我刚试过你的编辑,但还是没有成功。然而,我确实找到了另一个解决办法。我马上就把答案贴出来。抱歉。。。我似乎无法使用post编辑器使上面的代码块保持格式化。不管我怎么进去,它总是破的。但这就是让我的应用程序工作的代码。