Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
全屏使用MPMoviePlayerViewController的iOS(iPad)_Ipad_Video_Ios4 - Fatal编程技术网

全屏使用MPMoviePlayerViewController的iOS(iPad)

全屏使用MPMoviePlayerViewController的iOS(iPad),ipad,video,ios4,Ipad,Video,Ios4,我有一个带有5个按钮的单视图应用程序,当按下其中一个按钮时,播放器会在原始视图上向上滑动,并开始全屏播放视频(应该如此) 除了按下全屏/最小化图标(播放控件旁边的两个互相指向的对角箭头)外,所有操作都非常有效。按下此按钮时,带有五个按钮的原始视图将在视频播放器上向上滑动。问题是视频仍在原始视图下播放。我真的很想取消全屏/最小化图标,但从我看来,这似乎是不可能的。所以我在想,当按下全屏/最小化图标时,我可能可以使用观察者收听,我可以做我需要做的事情。我只是找不到任何关于如何做到这一点的可靠信息。任

我有一个带有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编辑器使上面的代码块保持格式化。不管我怎么进去,它总是破的。但这就是让我的应用程序工作的代码。