2010-04-27 13 views
15

Estoy teniendo un problema con el UIWebView y MPMoviePlayerController: Mi UIWebView tiene una película dentro del html (es un archivo HTML local), estoy usando HTML5 y una etiqueta de vídeo para el vídeo . El problema es que el usuario puede configurar el video para jugar en línea, directamente en el html o puede tocar el botón de pantalla completa, pero necesito saber si el video se está reproduciendo en pantalla completa.MPMoviePlayerController película a pantalla completa dentro de un UIWebView

He intentado usar MPMoviePlayerDidEnterFullscreenNotification pero sin éxito.

¿Alguien sabe cómo recibir esta notificación desde la página web?

Gracias de antemano

+0

Consulte mi respuesta en http://stackoverflow.com/questions/8518719/how-to-receive-nsnotifications-from-uiwebview-embedded-youtube-video-playback/8554040#8554040 para encontrar una forma de lograr esto . – Till

+0

Esta es la mejor solución que encontré y trabajé para mí http://stackoverflow.com/a/9088751/1002338 – Mona

Respuesta

2

Si está incrustando su película en una vista web utilizando HTML, entonces usted tendrá que hacer frente a la película con Javascript en lugar de la clase MPMoviePlayer.

Eche un vistazo a la guía de scripts de Apple para Quicktime here.

Creo que la propiedad que necesita es GetRectangle() que devuelve una cadena de la ubicación y las dimensiones de la película dentro del área de inserción.

Una vez que tenga las dimensiones, puede volver a pasarlo a Objective-C desde Javascript.

+0

Esto es útil para decir cuál es el tamaño del rectángulo en un momento dado; sin embargo, la pregunta pregunta cómo obtener la notificación de que el reproductor de películas ha ingresado a pantalla completa (o que el tamaño ha cambiado). –

15

No se envía ninguna notificación (vea también esta publicación: Event on view displayed change (Youtube MPMoviePlayerViewController)), pero la vista web hará algo de hackish: agregará una subvista a la vista raíz UIViewController's, la hará pantalla completa y reproducirá la película allí.

Haz que tu vista principal UIViewController's sea tuya, y intercepta -didAddSubview: y . De esta forma, podrás detectar cuándo se trae el jugador a pantalla completa.

+0

Ese pequeño comentario sobre agregar una subvista a la vista raíz de UIViewController fue invaluable. Sin él, no tenía idea de por qué se llamaba a los métodos de apariencia de RootViewController, cada vez que dejaba un reproductor de película de pantalla completa alojado en un VC completamente diferente. – Julian

4

También puede etiquetar su vista principal y extender UIView (o poner en práctica los métodos siguientes en caso de que el propietario de la vista principal):

@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

¡Funciona como un encanto! –

+0

Parece que esto se rompió en iOS 6. ¿Alguna otra idea? –

0

Desde Apple's documentation:

de pantalla completa de eventos y Propiedades

Safari emite un evento webkitfullscreenchange cuando un elemento entra o sale del modo de pantalla completa. Escuche este evento para detectar cambios.

Puede probar la propiedad document.webkitIsFullScreen para ver si Safari ha entrado o salido recientemente del modo de pantalla completa. La propiedad es verdadera cuando está en modo de pantalla completa.

La propiedad document.webkitCurrentFullScreenElement contiene el elemento que está en modo de pantalla completa. Utilice esta propiedad si tiene más de un elemento que podría estar en modo de pantalla completa.

Desafortunadamente, estos no parecen funcionar en iOS. Apple necesita cambiar esto.

Cuestiones relacionadas