MPMoviePlayer完成按钮问题

9

我正在使用MPMoviePlayer来显示视频。我进入全屏模式,当点击完成按钮时,希望将整个播放器从我的视图中移除。目前只能退出全屏模式。如何跟踪doneButton的点击或者如何解决这个问题?

2个回答

25
你可以通过添加一个通知处理程序到MPMoviePlayerDidExitFullscreenNotification来实现,因为当用户点击“完成”按钮时,该通知将被发送。请确保在初始化器的某处添加处理程序。
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(MPMoviePlayerDidExitFullscreen:) name:MPMoviePlayerDidExitFullscreenNotification object:nil];

现在实现这个处理程序:

- (void)MPMoviePlayerDidExitFullscreen:(NSNotification *)notification
{
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:MPMoviePlayerDidExitFullscreenNotification 
                                                  object:nil];

    [moviePlayerController stop];
    [moviePlayerController.view removeFromSuperview];
}

@Jackelope11 如果这个答案解决了你的问题,请点击该答案左侧的复选标记以及向上指的箭头 - 感谢并且我很高兴能够帮到你。 - Till
我进行了检查,但是我没有足够的积分来提高投票。不过,我很感谢你的回答。 - Jackelope11
@Jackelope11 你看了另一个答案 :D - 嗯,差不多了 - 祝编程愉快! - Till
我正在努力自己解决这个问题 - 这个解决方案的问题在于,如果用户也使用“最小化”按钮进行缩小,您最终将退出。这绝对不像正确的行为。 - Ryan
@Ryan,“完成”按钮是用于最小化播放器,而不是结束它。我的解决方案仅适用于您打算仅允许全屏的情况。 - Till
显示剩余2条评论

6
据我所知,你无法在点击“完成”按钮时收到通知。但是,当电影播放器退出全屏后,你可以收到通知。为此,你需要使用MPMoviePlayerDidExitFullscreenNotification
要观察和响应此通知,你需要将以下代码粘贴到包含IBAction的类文件中(将其放入viewDidLoad方法中):
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(exitedFullScreen) name:@"MPMoviePlayerDidExitFullscreenNotification" object:nil];

现在您需要在同一类中创建exitedFullScreen方法:
-(void) exitedFullScreen
{
     //Do whatever you want here
}

最后,在您的viewDidUnload方法中,粘贴以下行:

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"MPMoviePlayerDidExitFullscreenNotification" object:nil];

为了解释这个问题:
在你的viewDidLoad中,“addObserver”代码行确保你的viewController负责处理moviePlayer正在监听MPMoviePlayerDidExitFullScreen通知。
那一行代码使得当通知到来时,exitedFullScreen方法被触发,你可以在其中放置想要在Done按钮被点击时运行的代码。
在viewDidUnload中,viewController将被卸载,因此你需要停止监听通知,因此需要使用removeObserver部分。

谢谢,我想知道使用它会是什么样子。我使用IBAction启动MPMoviePlayer,那么我该如何实现您的建议? - Jackelope11
Sid,它真的能工作吗?因为我在我的应用程序中尝试了你的代码,但它并没有像应该的那样工作!!!任何帮助将不胜感激。 - Hemang
当我的视图加载时,它会在全屏模式下播放视频,它有一个名为“完成”的按钮,我希望当用户按下该按钮时退出全屏。 - Hemang
你如何区分用户点击“完成”按钮和点击“最小化”按钮?在两种情况下,通知中心的通知是相同的,但最终结果却截然不同...当点击“完成”按钮时,移动停止后被最小化,而在另一种情况下,它会继续以迷你状态播放...我需要在按下“完成”按钮时执行某些操作... - Moonwalker
当你收到通知时,检查一下 'playbackState' 属性怎么样? - Sid
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接