Проверьте, закончилось ли видео с YouTube (MPMoviePlayer)

#iphone #sdk #webview #youtube #mpmovieplayer

#iPhone #sdk #webview #YouTube #mpmovieplayer

Вопрос:

У меня есть просмотр с веб-просмотром, который загружает видео с YouTube. Я использую следующие методы для автоматического запуска видео с YouTube при загрузке веб-просмотра.

Веб-просмотр открывает собственный видеоплеер iPhone. Есть ли какой-либо способ проверить, закончилось ли видео или пользователь нажал кнопку «OK» проигрывателя фильмов, и проигрыватель, таким образом, закрыт?

Это методы, которые я использую для автоматического запуска веб-просмотра:

 - (UIButton *)findButtonInView:(UIView *)view {
    UIButton *button = nil;

    if([view isMemberOfClass:[UIButton class]]) {
        return (UIButton *)view;
    }

    if(view.subviews amp;amp; [view.subviews count] > 0) {
        for(UIView *subview in view.subviews) {
            button = [self findButtonInView:subview];
            if(button) return button;
        }
    }

    return button;
}

- (void)webViewDidFinishLoad:(UIWebView *)_webView {
    UIButton *b = [self findButtonInView:_webView];
    [b sendActionsForControlEvents:UIControlEventTouchUpInside];
}
  

Ответ №1:

Apple не отправляет [документированное] уведомление об этом, поэтому вам придется немного поднапрячься.

Способ, которым я это делаю, — проверить keyWindow приложения. Я почерпнул идею отсюда.

в вашем файле .h следите за своим таймером и нужным keyWindow:

 NSTimer *windowTimer;
UIWindow *keyWindow;
  

в вашем файле .m вам необходимо следующее:

 - (void)viewDidLoad {
    [super viewDidUnload];
    keyWindow = [[UIApplication sharedApplication] keyWindow];
}
  

Затем отредактируйте свой метод делегирования и добавьте один новый метод:

 - (void)webViewDidFinishLoad:(UIWebView *)_webView {
    UIButton *b = [self findButtonInView:_webView];
    [b sendActionsForControlEvents:UIControlEventTouchUpInside];

    // start checking the current keyWindow
    windowTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(checkWindowStatus) userInfo:nil repeats:YES];
}

- (void) checkWindowStatus {
    // if the key window is back to our application
    if (keyWindow == [[UIApplication sharedApplication] keyWindow]) {
        [windowTimer invalidate];
        windowTimer = nil;

        ... window has dismissed, do your thing ...
    }
}