Pregunta

Estoy intentando añadir botones personalizados a la izquierda ya la derecha de los / juego / mandos avanzados estándares de rebobinado en una vista MPMoviePlayerController (2.x OS y arriba). He descubierto la manera de añadirlos a la ventana del reproductor, pero siempre están visibles. ¿Hay una manera de detectar cuando aparecen los controles estándar y desaparecer?

¿Fue útil?

Solución

Ok, lo consiguió, que de esta manera:

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);

Donde _movePlayer es la instancia del reproductor. En el bucle más profundo, el MPFullScreenVideoOverlay instancia de vista tendrá alfa == 0,0 si los controles están ocultos, o alfa 1,0 si se muestran los controles. Se puede añadir un observador y disparar las cosas, según sea necesario. Sé que no es elegante, pero funciona para mí, ya que Apple no ha documentado nada con respecto a esta tarea.

Saludos ...

Otros consejos

La respuesta 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)               
          }
      }

   }
}

i cambiado el bucle más interior. En realidad 1004 es la etiqueta de MPMoviePlayer controles para que funcione con mayor precisión.

Mira en la propiedad movieControlMode. Es posible ajustar el MPMovieControlMode

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

typedef enum {
   MPMovieControlModeDefault,
   MPMovieControlModeVolumeOnly,
   MPMovieControlModeHidden
} 

MPMovieControlMode;

También puede comprobar fuera de MPMoviePlayerScalingModeDidChangeNotification

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
  }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top