Получить уведомление, когда видео начинается или останавливается в UIWebView

Здравствуйте, я новичок в цели - с

У меня проблема с UIWebView а также MPMoviePlayerController: Мой UIWebView есть фильм внутри HTML (это локальный файл HTML), я использую HTML5 и тег видео для видео.

Я хочу получить уведомление, когда видео начинается или останавливается в UIWebView....

Я пытался использовать MPMoviePlayerPlaybackDidFinishNotification, но это не стреляет...

Я также пытался сделать мой главный UIViewControllerЭто мой собственный вид и перехват -didAddSubview: а также -willRemoveSubview:, но без успеха...

Любой орган знает, как получить уведомление от uiwebview??

2 ответа

Вы можете наблюдать @"MPAVControllerPlaybackStateChangedNotification" (использование nil для объекта). Это уведомление не задокументировано, поэтому я не знаю, одобрит ли App Store ваше приложение.

[[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(playbackStateDidChange:)
    name:@"MPAVControllerPlaybackStateChangedNotification"
    object:nil];

В уведомлении есть ключ MPAVControllerNewStateParameter в его userInfo, Значение кажется равным 0 до начала воспроизведения, 1 - когда оно приостановлено, 2 - при воспроизведении и 3 (на мгновение) при перетаскивании ползунка воспроизведения.

- (void)playbackStateDidChange:(NSNotification *)note
{
    NSLog(@"note.name=%@ state=%d", note.name, [[note.userInfo objectForKey:@"MPAVControllerNewStateParameter"] intValue]);
}

Я много об этом искал.. Вот решение, которое я нашел для получения вызова уведомления о завершении воспроизведения. Протестированный код на iOS6.0 и выше. Все благодаря @Morten.

В viewDidLoad добавить наблюдателя

[[NSNotificationCenter defaultCenter] addObserver:self
 selector:@selector(playbackDidEnd:)
name:@"MPAVControllerItemPlaybackDidEndNotification"//@"MPAVControllerPlaybackStateChangedNotification"
object:nil];

Затем просто добавьте следующий код JavaScript webViewDidFinishLoad делегировать, как показано ниже

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    //http://stackru.com/a/12504918/860488
    [videoView stringByEvaluatingJavaScriptFromString:@"\
                                    var intervalId = setInterval(function() { \
                                        var vph5 = document.getElementById(\"video-player\");\
                                        if (vph5) {\
                                            vph5.playVideo();\
                                            clearInterval(intervalId);\
                                        } \
                                    }, 100);"];
}

- (void)playbackDidEnd:(NSNotification *)note
{
//do your stuff here
    [videoView removeFromSuperview];
    videoView.delegate = nil;
    videoView = nil;
}

Вы получите завершение вызова PlayDid в выбранном выше и можете сделать все, что вам нужно. Удачного кодирования!

Другие вопросы по тегам