Ich habe eine UIWebview in einem UIScrollView. In der Webansicht habe ich einen eingebetteten YouTube-Film. Wenn ich den YouTube-Film spiele, funktioniert alles einwandfrei. Wenn ich jedoch die Vollbild-Taste drücke, wird der Film hinter dem Webview abgespielt. Das WebView in den Vordergrund zu bringen, funktioniert nicht, weil ich die Scroll-Funktionen des ScrollViews horizontal scrollen lassen möchte.iPad SDK: Embedded YouTube Film spielt Vollbild-Version hinter UIWebView
Antwort
Grundsätzlich möchten Sie erkennen können, wenn ein Film beginnt, Vollbildmodus zu spielen und Ihre Ansichten entsprechend anzuordnen. Dann, wenn die Vollbildwiedergabe beendet ist, möchten Sie Ihre Ansichten wieder auf ihre ursprüngliche Position bringen können.
Das Problem ist, es gibt keine dokumentierte Möglichkeit, sich einzuklinken oder zu erkennen, wenn ein UIWebView die Videowiedergabe im Vollbildmodus auslöst.
Ich sagte "dokumentierte Weise", weil es einige Benachrichtigungen gibt, mit denen Sie erkennen können, wenn ein UIWebView die Vollbildwiedergabe auslöst. Sie können nur auf sie hören und Ihre Ansichten entsprechend neu anordnen. Ich empfehle das jedoch nicht unbedingt, da sie undokumentiert sind und sich ändern können (tatsächlich haben sie einen Schreibfehler bis iOS 4.3, siehe Antworten unten).
// For iOS 4.3 and above:
UIMoviePlayerControllerDidEnterFullscreenNotification
UIMoviePlayerControllerDidExitFullscreenNotification
// For iOS 4.2 and below:
UIMoviePlayerControllerDidEnterFullcreenNotification
UIMoviePlayerControllerDidExitFullcreenNotification // (note spelling mistake)
diese heraus zu finden, war ein bisschen wie ein Schmerz - es gibt tatsächlich einige mehr Benachrichtigungen sind, die ausgelöst werden, wenn ein YouTube-Video in einem UIWebView wiedergegeben wird. Um sie herauszufinden, müssen Sie bei allen Benachrichtigungen einen Haltepunkt löschen und dann manuell die Speicherorte dieser Benachrichtigungen überprüfen, um ihre String-Namen herauszufinden. Ich glaube nicht, dass irgendjemand diese zuvor herausgezogen hat, denn wenn ich sie google, bekomme ich nichts. Aber sie funktionieren, versprochen!
Ich hoffe, in der Lage zu sein, benachrichtigt zu werden, wenn die Vollbildwiedergabe eingegeben/beendet wird, mit der massiven Einschränkung, dass Apple dieses undokumentierte Verhalten jederzeit ändern könnte. Ihre App wird nicht sofort abgelehnt, um sie zu verwenden (weil Sie keine undokumentierten Methoden aufrufen), und ich habe sie in Versandanwendungen verwendet. Aber es ist immer noch nicht die beste Idee der Welt ... vielleicht die einzige Option, die Sie haben.
Bearbeiten: Um zu klären, basierend auf dem Kommentar unten: Sie sind keine Konstanten, also müssten Sie sie in Anführungszeichen setzen, wenn Sie für Benachrichtigungen registriert waren.
Was muss ich importieren, um sie zur Arbeit zu bringen? Ich verwende Xcode 4 und ich bekomme einen Build-Fehler (Verwendung von nicht deklarierten Bezeichner) – ageektrapped
Sie müssen sie in Anführungszeichen setzen, sie sind keine Konstanten, wie folgt: 'addObserver: self selector: @selector (someSelector) name: @ "UIMoviePlayerControllerDidEnterFullcreenNotification" Objekt: nil] '- hoffe das hilft! – lxt
Bernado hat einen guten Fang gemacht - in 4.3 haben sich die Benachrichtigungsnamen geändert und sind jetzt richtig geschrieben. – lxt
Ich wollte nur bestätigen, dass das funktioniert, nachdem ich eine Weile damit herumgespielt habe. Sie können direkten Zugriff auf die Ansicht erhalten, in der das Video abgespielt wird. Dies ist eine Blockierungsmethode, mit der Sie sich für die Benachrichtigung registrieren und relevante Ansichten abrufen können.
Hinweis: Sie müssen das Hinzufügen von Unteransichten verzögern und/oder auf interne Unteransichten von Apple zugreifen, um die Navigationsleiste zur weiteren Anpassung zu entfernen.
[[NSNotificationCenter defaultCenter]
addObserverForName:@"UIMoviePlayerControllerDidEnterFullcreenNotification"
object:nil
queue:nil
usingBlock:^(NSNotification *note){
MPMoviePlayerController *theMovieController = [note object];
UIView *theDestinationVideoView = [[note userInfo]
objectForKey:@"UIMoviePlayerControllerFullscreenViewUserInfoKey"];
}];
Ich habe keinen Erfolg damit das funktioniert, der Block wird nie ausgelöst, ist das noch in 4.0 gültig? – box86rowh
OK, scheint, dass sie ihre Rechtschreibfehler behoben haben, ist es jetzt: UIMoviePlayerControllerDidEnterFullscreenNotification – box86rowh
Kann ich das Video programmgesteuert anhalten, während das Video im Vollbildmodus in uiwebview abgespielt wird? – g212gs
Für iOS 4.3+, haben Apple-die Namen dieser Meldungen geändert: UIMoviePlayerControllerDidEnterFullcreenNotification ist jetzt UIMoviePlayerControllerDidEnterFullscreenNotification
UIMoviePlayerControllerDidExitFullcreenNotification jetzt ist UIMoviePlayerControllerDidExitFullscreenNotification
Bitte beachten: Der Begriff "Fullscreen" hat sich geändert "Vollbild".
Danke!
Schön entdeckt - ich habe meine Antwort aktualisiert, um Ihre Korrektur zu referenzieren. – lxt
- 1. ios7 UIWebView Youtube Video
- 2. Embedded Quicktime-Film nicht im IE
- 3. Wie funktioniert ein YouTube-Film-Downloader? - YouTube
- 4. UIWebView Streaming Youtube geht nicht auf Vollbild auf iPad
- 5. iPhone UIWebView spielt MP3. Entlassungsprotokoll?
- 6. Embedded Youtube Video Problem auf dem iPhone
- 7. MPMoviePlayerController Fullscreen Film in einem UIWebView
- 8. Youtube API - Touch-Event an Ansichten hinter Youtube Player
- 9. iOS SDK :: Vibration & spielt einen Piepton.
- 10. iPhone SDK: UIWebView
- 11. IOS6 Landschaft spielt eingebettet Youtube Video von einer uiwebview in einem einzigen Porträt iPhone App
- 12. mit BING Karten auf iPhone/iPad sdk
- 13. YouTube Video spielt nicht in WebView - Android
- 14. Zeige Steuerelemente immer auf YouTube embedded iframe
- 15. Zeichnen Sie einen Schatten hinter UIWebView
- 16. Youtube-Video in einem UIWebView ohne Vollbild abspielen
- 17. Offline-App mit UIWebview für iPad
- 18. iPad Pro "HTTP_USER_AGENT" von iOS UIWebView
- 19. YouTube UITableView-Zellen mit UIWebView blockierendem Thread?
- 20. Warum füllt Youtube Video UiWebView nicht?
- 21. Vimeo Videos spielen nicht auf dem iPad UIWebView
- 22. Verwenden von MPMoviePlayerViewController in SDK 3.2 für iPad
- 23. Flash SWF spielt nicht!
- 24. iPhone SDK: Webseiten programmgesteuert in UIWebView steuern
- 25. Wie kann ich Youtube-Video ohne UIWebView wiedergeben oder Video-Player erkennen, wenn Youtube-Video mit webview abgespielt wird?
- 26. Wie man den Text hinter dem SimpleCaptcha Bild spielt
- 27. Youtube Player API - Nur spielt Browser Tab ist ausgewählt
- 28. Wie man Youtube Video auf Klicken eines Bildes spielt?
- 29. Wie spielt man YouTube-Videos in einer Silverlight-Anwendung?
- 30. Wie spielt man YouTube-Video im ExoPlayer in Android?
Warum haben Sie eine Webansicht in einem Scrollview? Ein UIWebView implementiert sein eigenes Scroll-Verhalten.Je nachdem, wie Sie die Delegierten verbinden, können Sie außerdem merkwürdiges Verhalten in Bezug auf das UIScrollViewDelegate erhalten, das sowohl von UIWebView als auch von UIScrollView implementiert wird. Wenn Sie also sowohl dem scrollview als auch dem webview mitteilen, dass seine delegate -Eigenschaft auf sich selbst (Ihren Controller) zeigen soll, wird jedes Mal, wenn das Webview scrollt, Methoden wie 'scrollViewDidScroll:' ausgelöst, was dieselbe Methode ist, die wann ausgelöst wird Ihre Bildlaufansicht scrollt und nicht die Webansicht. Scheint böse zu mir. – jer
Was ich erreichen möchte, ist, dass ich horizontal durch verschiedene Webansichten blättern kann (wobei jedes Webview eine Magazinseite ist). Das Scrollverhalten der Webviews ist deaktiviert. Gibt es eine Möglichkeit, dies besser zu machen, oder kannst du mir sagen, wie ich den YouTube-Film in den Vordergrund rücken kann? – user517153