2008-10-10 20 views
14

Estoy intentando averiguar cómo agregar un control personalizado al iPhone MoviePlayer. Para ver un ejemplo de lo que intento hacer, vea la siguiente imagen.Agregue controles personalizados a MoviePlayer

alt text http://www.maclife.com/files/u53/06_player.jpg

Estoy tratando de añadir algo así como los controles de la derecha e izquierda de los controles básicos de la película.

Lo había hecho en el Open SDK agregando una subclase a la vista de jugador, pero ahora en el SDK oficial y Apple pasando a MPMoviePlayerController no estoy seguro de cómo hacerlo.

También con mi antigua versión de firmware 1.x me requirió capturar eventos táctiles y ocultar/mostrar el control yo mismo. Espero que haya una forma de hacerlo con los controles estándar, pero si no, está bien.

Gracias de antemano.

Respuesta

10

¡He encontrado la MEJOR manera de hacer esto!

creas tu reproductor de películas como normal y luego haga lo siguiente:

id vvController = [theMovie videoViewController]; 
[[vvController _overlayView] addSubview:mainView]; 

Dónde MAINVIEW 'es su plantilla personalizada. Hacer esto hace que su superposición personalizada se muestre y se oculte con las superposiciones normales, ¡ya que ahora son una en la misma!

Tenga en cuenta que esto sigue utilizando los marcos estándar, pero no está documentado en los marcos. Por lo tanto, debe ser 100% seguro para las aplicaciones, pero "podría" cambiar sin previo aviso de Apple en los marcos posteriores.

+0

Solo había estado buscando lo mismo. Buen trabajo. +1 – Akusete

+0

¿Ustedes saben si pueden crear controles personalizados que no sean los que están en el reproductor multimedia? por ejemplo, reproducción cuadro por cuadro? – keuminotti

+0

Puede crear controles, pero lo que hacen esos controles está limitado a lo que puede hacer con el SDK. Por ejemplo, tengo un control de calificación que muestro y, una vez evaluado, lo envía a un servidor. Lo que usted necesita sería poder decirle al jugador que avance 1 cuadro y detenerse, lo que no puede hacer actualmente. Presente una solicitud de función en bugreporter.apple.com si lo desea. – kdbdallas

8

This sample application que proporciona Apple debería ayudar. A partir de la descripción:

muestra cómo utilizar el Media Player Framework para reproducir una película de pantalla completa. El ejemplo contiene el código para configurar el fondo de película color, los controles de reproducción y el modo de escala a través de la aplicación integrada Configuraciones . También muestra cómo dibujar controles de superposición personalizados encima de la película durante la reproducción.

+3

Esto funciona para añadir un control personalizado, sin embargo, tiene no alternar con los controles predeterminados. El ejemplo muestra cómo capturar un toque dentro de su propio control personalizado, pero lo que muestran no funcionará con la ocultación de su control. Deberá seguir capturando otros grifos para poder ocultar su control. – kdbdallas

10

La gente aquí probablemente también haya visto en otras publicaciones de blogs el siguiente acercamiento a "obtener la ventana del reproductor de películas" - en el índice = 1. Aunque este enfoque (vea el fragmento a continuación) también es un poco "frágil" ", es probable que sea un poco" más seguro "ya que hace no hacer uso de cualquier método no documentado o no público en MPMoviePlayerController.

Tenga en cuenta también que se debe esperar hasta que se obtiene una MPMoviePlayerContentPreloadDidFinishNotification, por lo que la ventana de la película de DVD (idx = 1) será de hecho existe ;-)

Nota También estoy asignando un arbitraria (valores enteros) vea "etiqueta" en myOverlayView aquí - para que pueda volver a utilizar la vista cuando sea posible, es decir, verifique si ya se ha agregado a la ventana del reproductor principal.

anyhoo, aquí está el código de fragmento relevante:

// use slight "hack" to get our (parent) movie-player window, should always (?) be the UIWindow at index = 1 
// 
UIWindow *moviePlayerWindow= [[[UIApplication sharedApplication] windows] objectAtIndex:1]; 

myOverlayView.center = CGPointMake(
          moviePlayerWindow.bounds.size.width - (myOverlayView.bounds.size.height/2) - myOverlayView.display_origin.y, 
          moviePlayerWindow.center.y 
           ); // center our overlay-view 

myOverlayView.hidden = NO; // and show it 

if([moviePlayerWindow viewWithTag: MY_OVERLAY_VIEW_TAG] == nil) { 
    // haven't added our overlay-view as a sub-view to the main MoviePlayer window yet... so do that now 
    myOverlayView.tag = MY_OVERLAY_VIEW_TAG; 
    [moviePlayerWindow addSubview: myOverlayView]; 
} 
[moviePlayerWindow bringSubviewToFront: myOverlayView]; // in any case, bring it to the foreground 
+0

Quizás no estoy interpretando tu teoría correctamente, pero mi control personalizado no se esconde con el resto de los controles del reproductor. Se supone que este código permite eso? – Jacksonkr

1

recomiendo VideoPlayerKit. Admite streaming, pantalla completa, AirPlay.

https://github.com/ign/VideoPlayerKit

+0

He estado teniendo problemas con el uso de este, más específicamente con la parte "ShareThis" del código. Heres una pregunta que publiqué antes. http://stackoverflow.com/questions/17667078/are-there-any-tutorials-on-setting-up-videoplayerkit – vnchopra

+0

biblioteca abandonada :( – AsifHabib

1

no he implementado ALMoviePlayerController pero parece proporcionar una solución sucinta y suficiente para su problema.

De git repo:

"Una gota en el reemplazo para MPMoviePlayerController que expone los elementos de interfaz de usuario y permite la máxima personalización"

https://github.com/alobi/ALMoviePlayerController

Cuestiones relacionadas