2010-11-11 57 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 
    } 
}