Как определить, когда элементы управления iPhone MPMoviePlayer появляются / исчезают? - PullRequest
5 голосов
/ 18 марта 2010

Я пытаюсь добавить пользовательские кнопки слева и справа от стандартных элементов управления перемоткой / воспроизведением / перемоткой в ​​представлении MPMoviePlayerController (OS 2.x и выше). Я понял, как добавить их в окно плеера, но они всегда видны. Есть ли способ определить, когда стандартные элементы управления появляются и исчезают?

Ответы [ 4 ]

10 голосов
/ 18 марта 2011

Хорошо, понял, сделай так:

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

Где _movePlayer - ваш экземпляр игрока. В самом глубоком цикле экземпляр представления MPFullScreenVideoOverlay будет иметь альфа == 0.0, если элементы управления скрыты, или альфа 1.0, если элементы управления отображаются. Вы можете добавить наблюдателя и запускать вещи по мере необходимости. Я знаю, что это не элегантно, но это работает для меня, так как Apple ничего не задокументировала относительно этой задачи.

Ура ...

1 голос
/ 06 января 2016

Cybercow ответ правильный, просто нужно немного изменить, чтобы сделать ответ более точным.

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

   }
}

я изменил самый внутренний цикл. На самом деле 1004 - это тег элементов управления MPMoviePlayer, поэтому он будет работать более точно.

0 голосов
/ 27 сентября 2010

до iOS3.2
обнаружить «недовольство» легко:

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

определить причину немного сложнее (может быть, есть лучший способ):

...
[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 голосов
/ 18 марта 2010

Загляните в свойство movieControlMode. Вы можете установить MPMovieControlMode

MPMovieControlMode Параметры для отображения элементов управления воспроизведением фильма.

typedef enum {
   MPMovieControlModeDefault,
   MPMovieControlModeVolumeOnly,
   MPMovieControlModeHidden
} 

MPMovieControlMode;

Вы также можете проверить MPMoviePlayerScalingModeDidChangeNotification

...