Como detectar quando os controles do iPhone MPMoviePlayer aparecem/desaparecem?
-
20-09-2019 - |
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?
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
}
}