Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.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
Ios 如何停止mpmovieplayervewcontroller';电影回放中的自动解雇完成了吗?_Ios_Mpmovieplayercontroller - Fatal编程技术网

Ios 如何停止mpmovieplayervewcontroller';电影回放中的自动解雇完成了吗?

Ios 如何停止mpmovieplayervewcontroller';电影回放中的自动解雇完成了吗?,ios,mpmovieplayercontroller,Ios,Mpmovieplayercontroller,通过presentMoviePlayServiceController激活:以模式显示的MPMoviePlayServiceController在其内容播放完毕后自动解除其自身功能 [self presentMoviePlayerViewControllerAnimated:videoPlayer]; 我已尝试禁用此功能,因为我想在以后播放其他内容。但是,即使我使用[[NSNotificationCenter defaultCenter]addObserver:self selector:@s

通过
presentMoviePlayServiceController激活:
以模式显示的MPMoviePlayServiceController在其内容播放完毕后自动解除其自身功能

[self presentMoviePlayerViewControllerAnimated:videoPlayer];
我已尝试禁用此功能,因为我想在以后播放其他内容。但是,即使我使用
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(movieFinishedCallback:)name:mpmovieplayerplaybackdidfishnotification object:playerVC.moviePlayer]注册到NSNotificationCenter并设置了一些其他内容,它仍然会取消

[self presentMoviePlayerViewControllerAnimated:videoPlayer];
如何阻止MPMoviePlayerViewController自动解除其自身功能

[self presentMoviePlayerViewControllerAnimated:videoPlayer];
更新:

[self presentMoviePlayerViewControllerAnimated:videoPlayer];
作为澄清,这个问题只是关于删除自动解雇,而不是关于处理禁用的“完成”按钮。选定的答案反映了这一点。这是经过设计的,因为我们假设开发人员添加了他们自己的方法来解除mpmovieplayervicewcontroller。然而,@bickster的回答也涉及“完成”按钮。

多亏了我发现MPMoviePlayServiceController在创建时自动将自己注册到NSNotificationCenter。您必须首先删除此注册,它将自动停止自裁

// Initialize the movie player view controller with a video URL string
MPMoviePlayerViewController *playerVC = [[[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:aVideoUrl]] autorelease];
// Remove the movie player view controller from the "playback did finish" notification observers
[[NSNotificationCenter defaultCenter] removeObserver:playerVC  name:MPMoviePlayerPlaybackDidFinishNotification object:playerVC.moviePlayer];
[self presentMoviePlayerViewControllerAnimated:videoPlayer];

你可以试试这样的

[self presentMoviePlayerViewControllerAnimated:videoPlayer];
当mpmovieplayercontroller播放完视频后,您收到方法中的通知movieFinishedCallback:implemect

       [playerVC.movieplayer setContentURL:// set the url of the file you want to play here];

       [playerVC.moviePlayer play];
[self presentMoviePlayerViewControllerAnimated:videoPlayer];

希望这有帮助

您可以使用此代码阻止viewcontroller在用户单击“完成”按钮时自动解除并捕获事件,以便您自己解除viewcontroller

[self presentMoviePlayerViewControllerAnimated:videoPlayer];
第1步-分配MPMoviePlayerViewController

videoPlayer = [[MPMoviePlayerViewController alloc] initWithContentURL:[[NSURL alloc ]initWithString:[aURL];
[self presentMoviePlayerViewControllerAnimated:videoPlayer];
第2步-删除默认的MPMoviePlayerPlaybackDidFinishNotification observer并添加您自己的

[[NSNotificationCenter defaultCenter] removeObserver:videoPlayer
name:MPMoviePlayerPlaybackDidFinishNotification object:videoPlayer.moviePlayer];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(videoFinished:) name:MPMoviePlayerPlaybackDidFinishNotification object:videoPlayer.moviePlayer];
[self presentMoviePlayerViewControllerAnimated:videoPlayer];
第3步-当前视图控制器

[self presentMoviePlayerViewControllerAnimated:videoPlayer];
第4步-添加videoFinish:method

[self presentMoviePlayerViewControllerAnimated:videoPlayer];
-(void)videoFinished:(NSNotification*)aNotification{
    int value = [[aNotification.userInfo valueForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] intValue];
    if (value == MPMovieFinishReasonUserExited) {
        [self dismissMoviePlayerViewControllerAnimated];
    }
}
由于如果我从
NSNotificationCenter
中删除
mpmovieplayerplaybackdidfishnotification
,则“完成”按钮不再工作,因此我将重复模式更改为
MPMovieRepeatModeOne
。 然后,一切正常,除了视频被重复

[self presentMoviePlayerViewControllerAnimated:videoPlayer];
MPMoviePlayerViewController *playerVC = [[[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:aVideoUrl]] autorelease];
[playerVC.moviePlayer setRepeatMode:MPMovieRepeatModeOne];

真奇怪。为什么要对一个差不多一年前回答过的问题再加上一个近乎重复的答案呢?这不是近乎重复。这个答案对我不起作用。我提供的答案有效且更完整。自从这个问题被回答后,一定发生了一些变化。我希望我的答案能让人们省去我花在研究它今天是如何工作的时间。我希望我的回答能满足您的好奇心。只是实际问题只是关于删除实际解雇,这在您第2步的第一行代码中得到了回答。除了添加您试图删除的相同功能之外,我真的不明白其余部分做了什么。这是一个更好的答案,因为如果您不这样做(至少在iOS 7中),那么用户根本就无法关闭控制器。通过这种方法,您可以得到“您想要的”,控制器出现,然后一直呆在那里,直到用户明确告诉它离开。如果这不是你想要的,那么就不要这样做:)这是正确的答案——让视频播放器留在屏幕上,直到用户明确按下“完成”。我唯一想要的是,@bickster,你纠正了第二段的最后一行——你缺少了一个“object:nil];“我想:”)但是,如果我这样做,“Done”按钮不再工作,意味着我无法关闭视频播放器。在iOS 7中测试。@MinSoe这个问题仅仅是关于自动解聘,假设开发人员将安装某种解聘玩家的方法。然而,@bickster下面的回答应该会给你更多的里程。他也有同样的问题。