2010-04-27 11 views
15

Mam problem z UIWebView i MPMoviePlayerController: Mój UIWebView ma film w html (jest to lokalny plik html), używam html5 i tagu wideo do wideo . Problem polega na tym, że użytkownik może ustawić wideo do odtwarzania w trybie bezpośrednim, bezpośrednio na html lub może dotknąć przycisku pełnoekranowego, ale muszę wiedzieć, czy wideo jest odtwarzane na pełnym ekranie.Film pełnoekranowy MPMoviePlayerController wewnątrz UIWebView

Próbowałem użyć MPMoviePlayerDidEnterFullscreenNotification, ale bez powodzenia.

Czy ktoś wie, jak uzyskać to powiadomienie ze strony internetowej?

góry dzięki

+0

Zobacz moją odpowiedź na http://stackoverflow.com/questions/8518719/how-to-receive-nsnotifications-from-uiwebview-embedded-youtube-video-playback/8554040#8554040 dla znalezienia sposobu na osiągnięcie tego . – Till

+0

To jest najlepsze rozwiązanie, które znalazłem i pracowałem dla mnie http://stackoverflow.com/a/9088751/1002338 – Mona

Odpowiedz

2

Jeśli osadzanie swój film w widoku strony internetowej za pomocą HTML, a następnie trzeba rozwiązać swój film za pomocą JavaScript zamiast klasę MPMoviePlayer.

Zobacz scenariusz Apple Scripting Guide dla QuickTime here.

Myślę, że właściwość, której potrzebujesz, to GetRectangle(), która zwraca ciąg lokalizacji i wymiarów filmu w obszarze osadzania.

Po uzyskaniu wymiarów, można przekazać go z powrotem do Objective-C z Javascript.

+0

Jest to pomocne w informowaniu o tym, jaki jest rozmiar prostokąta w danym czasie; Pytanie to jednak pyta, jak uzyskać powiadomienie, że odtwarzacz filmowy wszedł na pełny ekran (lub że zmienił się rozmiar). –

15

Nie wysyła się powiadomienia (zobacz także ten wpis: Event on view displayed change (Youtube MPMoviePlayerViewController)), ale widok internetowy zrobi coś hackowskiego: doda wyekspozycję do widoku głównego UIViewController's, przekształci się w pełny ekran i zagra tam w tym filmie.

Spraw, aby Twój główny UIViewController's mógł wyświetlać własny widok i przechwycić -didAddSubview: i -willRemoveSubview:. W ten sposób będziesz w stanie wykryć, kiedy gracz zostanie przyniesiony na pełnym ekranie.

+0

Ten mały komentarz dotyczący dodawania widoku podrzędnego do widoku głównego UIViewController był nieoceniony. Bez tego nie miałem pojęcia, dlaczego moje metody wywoływania RootViewController zostały wywołane, ilekroć opuściłem pełnoekranowy odtwarzacz filmów, który był hostowany w zupełnie innym VC. – Julian

4

można także oznaczyć swój główny widok i przedłużyć UIView (lub wdrożenie poniższych metod w przypadku, gdy właścicielem widok główny):

@implementation UIView (UIViewExtended) 
- (void)didAddSubview:(UIView *)subview { 
    if (subview.superview.tag == ...) { 
... set some flag here or do some action 
    } 
} 

- (void)willRemoveSubview:(UIView *)subview { 
    if (subview.superview.tag == ...) { 
... set some flag here or do some action 
    } 
} 
@end 
+0

Działa jak urok! –

+0

Wygląda na to, że się zepsuł w iOS 6. Jakieś inne pomysły? –

0

Od Apple's documentation:

Pełny Ekran zdarzeń i Właściwości

Safari emituje zdarzenie webkitfullscreenchange, gdy element wchodzi lub wychodzi z trybu pełnoekranowego. Posłuchaj tego zdarzenia, aby wykryć zmiany.

Możesz przetestować właściwość document.webkitIsFullScreen, aby sprawdzić, czy Safari ostatnio wszedł lub wyłączył tryb pełnoekranowy. Właściwość jest prawdziwa w trybie pełnoekranowym.

Właściwość document.webkitCurrentFullScreenElement zawiera element w trybie pełnoekranowym. Użyj tej właściwości, jeśli masz więcej niż jeden element, który może być w trybie pełnoekranowym.

Niestety, te elementy nie działają na iOS. Apple musi to zmienić.

Powiązane problemy