Pergunta

Estou tentando adicionar botões personalizados à esquerda e à direita dos controles padrão de Rewind/Play/Forward em uma visualização MPMoviePlayerController (OS 2.x e acima). Eu descobri como adicioná -los à janela do jogador, mas eles sempre são visíveis. Existe uma maneira de detectar quando os controles padrão aparecem e desaparecem?

Foi útil?

Solução

Ok, entendi, faça assim:

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

Onde _MovePlayer é a sua instância do jogador. No loop mais profundo, o MpfullScreenVideooverlay A instância da visualização terá alfa == 0.0 se os controles estiverem ocultos, ou alfa 1.0 se os controles forem mostrados. Você pode adicionar um observador e disparar coisas conforme necessário. Eu sei que não é elegante, mas funciona para mim, pois a Apple não documentou nada sobre essa tarefa.

Felicidades ...

Outras dicas

A resposta do CyberCow está certa apenas de adicionar poucas modificações para tornar a resposta mais 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)               
          }
      }

   }
}

Eu mudei o loop mais interno. Na verdade, 1004 é a etiqueta dos controles do MPMoviePlayer, para que funcione com mais precisão.

Olhe para a propriedade MovieControlmode. Você pode definir o mpMovieControlMode

MPMOVIECONTROLMODE Opções para exibir controles de reprodução de filmes.

typedef enum {
   MPMovieControlModeDefault,
   MPMovieControlModeVolumeOnly,
   MPMovieControlModeHidden
} 

MpMovieControlMode;

Você também pode conferir mpmovieplayerscalingmodedidChangenotification

Pre iOS3.2
Para detectar "desapegona" é fácil:

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

Detectar a apierância é um pouco mais difícil (talvez exista uma maneira melhor):

...
[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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top