2010-11-11 3 views
5

должен Согласно MPMoviePlayerController документ Apple: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

не можете ли вы запустить событие на кнопке «Готово»? –

+0

Я так не думаю. Это часть MPMoviePlayer, и для нее нет обратного вызова. – sol

+0

У меня такая же ситуация, пожалуйста, помогите! –

ответ

2

Когда вы получаете уведомление, вы можете проверить его окончание. Если это -1, то фильм закончен полностью обратно естественным путем.

Для потокового содержимого вы можете проверить MPMoviePlayerPlaybackDidFinishReasonUserInfoKey внутри userInfo на MPMoviePlayerPlaybackDidFinishNotification.

Если это значение равно MPMovieFinishReasonUserExited, то пользователь перестает воспроизводить контент.

+0

просто попробовал это. self.player.endPlaybackTime - это -1, закрываетесь ли вы с помощью кнопки «Готово» или если она полностью работает. Проверьте документацию - «Это свойство неприменимо для потокового содержимого». – sol

+0

О, я не знаю, что вы говорите о потоковом контенте .... Я пересмотрел свой ответ – Nevin

+2

Это кажется отличной идеей, но если ([[[userInfo user object] objectForKey: @ "MPMoviePlayerPlaybackDidFinishReasonUserInfoKey"] intValue] == MPMovieFinishReasonUserExited) всегда возвращает false, нажимаю ли я кнопку «Готово», или если пользователь заканчивается естественным образом. – sol

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 
    } 
} 
Смежные вопросы