2010-03-18 9 views

Respuesta

10

Ok, lo tengo, haga así:

BOOL controlsVisible = NO; 
for(id views in [[_moviePlayer view] subviews]){ 
for(id subViews in [views subviews]){ 
    for (id controlView in [subViews subviews]){ 
    controlsVisible = ([controlView alpha] <= 0.0) ? (NO) : (YES); 
    } 
    } 
} 
NSLog(@"player controls are visible: %d", controlsVisible); 

Dónde _movePlayer es la instancia del reproductor. En el bucle más profundo, la instancia de vista MPFullScreenVideoOverlay tendrá alfa == 0.0 si los controles están ocultos, o alfa 1.0 si se muestran los controles. Puede agregar un observador y disparar cosas según sea necesario. Sé que no es elegante, pero funciona para mí, ya que Apple no ha documentado nada sobre esta tarea.

Saludos ... Responder

+0

como su enfoque ... !! y +1 para este – Kamarshad

+0

no funciona cuando 3G está habilitado – hariszaman

0

Mire en la propiedad movieControlMode. Puede configurar el MPMovieControlMode

MPMovieControlMode Opciones para mostrar los controles de reproducción de películas.

typedef enum { 
    MPMovieControlModeDefault, 
    MPMovieControlModeVolumeOnly, 
    MPMovieControlModeHidden 
} 

MPMovieControlMode;

También puede comprobar fuera de MPMoviePlayerScalingModeDidChangeNotification

+1

Sé cómo activar los controles, lo que estoy buscando es una notificación cuando los controles aparecen y desaparecen (por ejemplo, cuando el usuario toca la pantalla). –

0

pre iOS3.2
para detectar "disapierance" es fácil:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayerController]; 

para detectar appierance es poco más difícil (tal vez hay una mejor manera) :

... 
[moviePlayerController play]; 
mainTimer = [NSTimer scheduledTimerWithTimeInterval:1/100 target:self selector:@selector(tick) userInfo:nil repeats:YES]; 

- (void)tick { 
    if([[[UIApplication sharedApplication] windows] count] < 2) return; 

    moviePlayerWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1]; 
    if(moviePlayerWindow){ 
    [mainTimer invalidate], mainTimer=nil; 
    // here you have moviePlayerWindow 
    } 
} 
+0

Me refiero a los controles de jugador que aparecen en un HUD sobre la parte superior de la película. Aparecerán y desaparecerán mientras se está reproduciendo el movimiento (por ejemplo, cuando el usuario toca la película). –

0

de cybercow es correcto sólo tiene que añadir una pequeña modificación para hacer la respuesta más precisa.

BOOL controlsVisible = NO; 
for(id views in [[self.moviePlayerViewController view] subviews]) 
{ 
    for(id subViews in [views subviews]) 
    { 
     for (id controlView in [subViews subviews]) 
     { 
      if ([controlView isKindOfClass:[UIView class]] && ((UIView*)controlView).tag == 1004) 
      { 
      controlsVisible = ([controlView alpha] <= 0.0) ? (NO) : (YES)    
      } 
     } 

    } 
} 

cambié el bucle más interno. En realidad, 1004 es la etiqueta de los controles de MPMoviePlayer, por lo que funcionará con mayor precisión.

Cuestiones relacionadas