Comment détecter les commandes iPhone MPMoviePlayer apparaissent / disparaissent?
-
20-09-2019 - |
Question
Je suis en train d'ajouter des boutons personnalisés à gauche et à droite du retour rapide standard / jeu / commandes avancées dans une vue MPMoviePlayerController (OS 2.x et plus). Je l'ai compris comment les ajouter à la fenêtre du lecteur, mais ils sont toujours visibles. Est-il un moyen de détecter le moment où les contrôles standards apparaissent et disparaissent?
La solution
Ok, il a obtenu, faire comme ceci:
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);
Où _movePlayer est votre instance du lecteur. Dans la boucle la plus profonde, la MPFullScreenVideoOverlay instance de vue aura alpha == 0.0 si les contrôles sont cachés, ou alpha 1.0 si les contrôles sont affichés. Vous pouvez ajouter un observateur et tirer les choses au besoin. Je sais que n'est pas élégant mais il fonctionne pour moi, comme Apple a rien documenté au sujet de cette tâche.
Vive ...
Autres conseils
La réponse de cybercow est juste il suffit d'ajouter peu de modifications pour rendre la réponse plus précise.
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 changé la boucle la plus intérieure. En fait, 1004 est la balise de MPMoviePlayer contrôles afin qu'il fonctionne avec plus de précision.
Regardez dans la propriété movieControlMode. Vous pouvez régler la MPMovieControlMode
MPMovieControlMode Options pour afficher les commandes de lecture de film.
typedef enum {
MPMovieControlModeDefault,
MPMovieControlModeVolumeOnly,
MPMovieControlModeHidden
}
MPMovieControlMode;
Vous pouvez également consulter MPMoviePlayerScalingModeDidChangeNotification
avant iOS3.2 pour détecter "disapierance" est facile:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayerController];
pour détecter appierance est plus difficile (peut-être il y a une meilleure façon):
...
[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
}
}