2012-04-25 23 views
5

Dzień dobry,Youtube zwolnienie zdarzenia (iOS)

Poprzez zastosowanie UIWebView mam teraz metody pracy, aby pokazać film na YouTube w mojej aplikacji (za pomocą znacznika, znalezienie przycisk odtwarzania wewnątrz WebView i wypalania zdarzenie dotykowe na tym).

Działa jak urok. Film pojawia się i gra. Chciałbym jednak otrzymać wydarzenie, gdy film się zakończy lub użytkownik kliknie przycisk zakończenia.

W Internecie stwierdziłem, że istnieje zdarzenie: MPAVControllerItemPlaybackDidEndNotification, gdzie można słuchać. Jednak ten nie zostanie wywołany.

Po dalszych badaniach stwierdziłem, że w przypadku filmów z YouTube umieszczonych w UIWebView zostało wywołane inne powiadomienie (UIMoviePlayerControllerDidExitFullscreenNotification). Niestety, ten już nie działa. (found it here)

Czy ktoś ma pojęcie, w jaki sposób mogę wykonać pewne działanie po zakończeniu odtwarzania wideo lub zostanie on odrzucony?

Dzięki

Odpowiedz

-1

Co trzeba tutaj jest coś takiego:

- (void)playerWillExitFullscreen:(NSNotification *)notification 
{ 
//do something... 
} 

[[NSNotificationCenter defaultCenter] addObserver:self 
            selector:@selector(playerWillExitFullscreen:) 
name:@"MPMoviePlayerWillExitFullscreenNotification" object:nil]; 
+0

Próbowałeś z iOS 6? Wypróbowaliśmy to wcześniej, powiadomienie nie uruchamia się tutaj. – fabb

+0

MPMoviePlayerWillExitFullscreenNotification działa dla mnie na iOS 6. Czy możesz sprawdzić, czy to działa? – defactodeity

+0

Niestety, to nie działa dla mnie. Może to ma związek z faktem, że używam wideo z Youtube w UIWebView? – fabb

5

Użyj UIMoviePlayerControllerWillExitFullscreenNotification Uzyskania powiadomiony, gdy użytkownik gwintowany na przycisk Gotowe. Model UIMoviePlayerControllerDidExitFullscreenNotification wydaje się być pominięty na iOS6.

pamiętać, że ... Czy ... vs. ... Will ... różnica!

Aby uzyskać więcej informacji na ten temat, ponownie sprawdź moją zaktualizowaną odpowiedź w ramach tego wpisu, do którego się odwołałeś w pytaniu. wygląd

+2

Nie działa w ios 8 –

0

Miejmy w tym scenariuszu:

enter image description here

Państwa zdaniem, masz przycisk. Po kliknięciu chcesz bezpośrednio odtwarzać wideo. W celu, aby to zrobić, trzeba otworzyć webview jako modalnego widzenia widoku:

[self presentModalViewController:videoWebView animated:NO]; 

Dla WebView, należy użyć Youtube API do integracji i automatycznie odtwarzać wideo. Zobacz proponowany przykład pracy tutaj: https://stackoverflow.com/a/15538968

Zobaczysz, że wideo jest uruchamiane w trybie modalnym widoku Twojej przeglądarki. Jednym ze sposobów wykrycia, kiedy film wideo zostanie odrzucony (po kliknięciu przycisku "done"), jest użycie viewDidAppear w klasie widoku z podglądem. W tej metodzie również odrzucisz widok webview, ale ... kiedy ten widok jest uruchamiany na początku, nie chcesz go odrzucić. Możesz dodać właściwość boolean, aby tego uniknąć.

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    if (_videoLaunched) { 
     [self dismissModalViewControllerAnimated:YES]; 
    } 
} 

W sposobie viewDidLoad, ta właściwość NO w sposobie webViewDidFinishLoad (metoda delegat WebView) ustawiają się na YES.

Myślę, że odpowiada na jedną część pytania.Jeśli chodzi o wykrywanie końca filmu, musisz zmodyfikować plik YT_Player.html, aby posłuchać zmian stanu.

ytPlayer = new YT.Player('media_area', {height: '100%', width: '100%', videoId: 'SbPFDcspRBA', 
           events: {'onReady': onPlayerReady, 'onStateChange': onPlayerStateChange} 

function onPlayerStateChange(e) { 
     var result = JSON.parse(event.data); 
     if (result.info == 0) { // Video end 
      window.location = "videomessage://end"; 
     } 
    } 
           }); 

Będziesz następnie połowu zdarzenie w widoku Webview i odrzucić to tak:

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 
    NSURL *url = request.URL; 
    if ([[url scheme] isEqualToString:@"videomessage"]) { 
     [self dismissModalViewControllerAnimated:YES]; 
     return YES; 
    } 
    return YES; 
} 
Powiązane problemy