Проверьте, закончилось ли видео на YouTube (MPMoviePlayer) - PullRequest
1 голос
/ 07 мая 2011

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

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

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

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

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

    if(view.subviews && [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 Ответ

3 голосов
/ 14 мая 2011

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

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

в вашем .h файле, отследите ваш таймер и желаемое окно ключа:

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 ...
    }
}
...