2010-11-11 28 views
5

powinny Według Apple'a MPMoviePlayerController doc:MPMoviePlayerPlaybackDidFinishNotification jest wywoływana, gdy nie

MPMoviePlayerPlaybackDidFinishNotification - To powiadomienie nie zostanie wysłane w przypadkach, w których gracz film jest wyświetlany w trybie pełnoekranowym, a użytkownik kliknie przycisk Gotowe.

Wydaje mi się, że to jest martwe. Korzystając z poniższego kodu, playerPlaybackDidFinish zostaje wywołany po stuknięciu przycisku "done".

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

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

trzeba rozróżniać między użytkownikiem dotknięcie przycisku i zrobić film kończąc całą drogę odtwarzania. playerPlaybackDidFinish zostaje wywołany, gdy film się kończy, ale tak jak powiedziałem, jest on również wywoływany po dotknięciu Gotowe.

+0

nie możesz pture zdarzenie na gotowym przycisku? –

+0

Nie sądzę. Jest to część MPMoviePlayer i nie ma tam żadnego połączenia zwrotnego. – sol

+0

Mam taką samą sytuację, proszę o pomoc! –

Odpowiedz

2

Po otrzymaniu powiadomienia możesz sprawdzić endPlaybackTime gracza. Jeśli wynosi -1, to film skończył się naturalnie.

W przypadku treści przesyłanych strumieniowo można sprawdzić wartość parametru MPMoviePlayerPlaybackDidFinishReasonUserInfoKey w pliku userInfo na stronie MPMoviePlayerPlaybackDidFinishNotification.

Jeśli jest równy MPMovieFinishReasonUserExited, to użytkownik przestał odtwarzać zawartość.

+0

właśnie tego próbowałem. self.player.endPlaybackTime wynosi -1, niezależnie od tego, czy zamkniesz za pomocą przycisku Gotowe, czy też do końca. Sprawdzono dokumentację - "Ta właściwość nie dotyczy treści przesyłanych strumieniowo". – sol

+0

Och, nie jestem świadomy, że mówisz o przesyłanej treści .... Poprawiłem moją odpowiedź – Nevin

+2

To wydaje się świetny pomysł, ale jeśli ([[[notification userInfo] objectForKey: @ "MPMoviePlayerPlaybackDidFinishReasonUserInfoKey"] intValue] == MPMovieFinishReasonUserExited) zawsze zwraca wartość false, niezależnie od tego, czy kliknę przycisk Gotowe, czy też użytkownik zakończy się naturalnie. – sol

22

Oto jak sprawdzić MPMoviePlayerPlaybackDidFinishReasonUserInfoKey który jest częścią notyfikacji 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

Upewnij dla

moviePlayer.repeatMode = MPMovieRepeatModeNone; 
3

Używam następujących coś zrobić, gdy film jest odtwarzany wszystko droga do końca:

- (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 
    } 
} 
Powiązane problemy