2010-11-11 55 views
5

应根据苹果的MPMoviePlayerController DOC:MPMoviePlayerPlaybackDidFinishNotification被调用时,它不

MPMoviePlayerPlaybackDidFinishNotification - 这个通知没有在电影播放在全屏模式下显示的情况下发送和用户点击完成按钮。

对我来说这似乎是错误的。使用下面的代码,当我点击完成按钮时,playerPlaybackDidFinish被调用。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerPlaybackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:self.player]; 

- (void) playerPlaybackDidFinish:(NSNotification*)notification 
{ 
    NSLog(@"WHY?"); 
    self.player.fullscreen = NO; 
} 

我需要区分用户点击完成按钮和电影完成播放。 playerPlaybackDidFinish在电影结束时会被调用,但正如我所说的,当您点击完成时它也会被调用。

+0

你不能CA在完成按钮上显示事件? – 2010-11-11 19:58:04

+0

我不这么认为。它是MPMoviePlayer的一部分,没有回调。 – sol 2010-11-11 20:01:30

+0

我有同样的情况,请帮助! – 2012-12-01 07:36:58

回答

2

当您收到通知时,您可以检查玩家的endPlaybackTime。如果它是-1,那么电影自然就完成了。

对于流式内容,您可以检查MPMoviePlayerPlaybackDidFinishNotification中userInfo内的MPMoviePlayerPlaybackDidFinishReasonUserInfoKey。

如果它等于MPMovieFinishReasonUserExited,那么它就是用户停止播放内容。

+0

刚刚尝试过。无论您是通过完成按钮关闭还是播放完毕,self.player.endPlaybackTime都为-1。检查了文档 - “此属性不适用于流式内容。” – sol 2010-11-12 02:05:50

+0

哦,我不知道你在谈论流内容....我修改了我的答案 – Nevin 2010-11-12 02:19:25

+2

这似乎是一个好主意,但如果([[[[通知userInfo] objectForKey:@“MPMoviePlayerPlaybackDidFinishReasonUserInfoKey”] intValue] == MPMovieFinishReasonUserExited)总是返回false,无论我单击完成还是用户自然结束。 – sol 2010-11-12 19:49:31

22

这里是你如何检查MPMoviePlayerPlaybackDidFinishReasonUserInfoKey这是MPMoviePlayerPlaybackDidFinishNotification的通知的一部分

- (void) playbackDidFinish:(NSNotification*)notification { 
    int reason = [[[notification userInfo] valueForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] intValue]; 
    if (reason == MPMovieFinishReasonPlaybackEnded) { 
     //movie finished playin 
    }else if (reason == MPMovieFinishReasonUserExited) { 
     //user hit the done button 
    }else if (reason == MPMovieFinishReasonPlaybackError) { 
     //error 
    } 
} 
0

确保为

moviePlayer.repeatMode = MPMovieRepeatModeNone; 
3

我使用下面做一些事情,当电影播放所有一直到结束:

- (void)playbackDidFinish:(NSNotification*)notification 
{ 
    BOOL playbackEnded = ([[[notification userInfo] valueForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] intValue] == MPMovieFinishReasonPlaybackEnded); 
    BOOL endReached = (self.player.currentPlaybackTime == self.player.playableDuration); 

    if (playbackEnded && endReached) { 
     // Movie Ended 
    } 
}