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

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


person Mark Smith    schedule 18.03.2010    source источник


Ответы (4)


Ок, понял, сделай так:

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 ничего не задокументировала по этой задаче.

Ваше здоровье ...

person cybercow    schedule 18.03.2011
comment
нравится твой подход..!! и +1 за это - person Kamar Shad; 01.11.2012

Ответ 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, поэтому он будет работать более точно.

person Abuzar Amin    schedule 06.01.2016
comment
Да благословит вас Бог, сэр! - person Onur Keskin; 11.10.2018

Посмотрите на свойство movieControlMode. Вы можете установить MPMovieControlMode

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

typedef enum {
   MPMovieControlModeDefault,
   MPMovieControlModeVolumeOnly,
   MPMovieControlModeHidden
} 

MPMovieControlMode;

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

person Iggy    schedule 18.03.2010
comment
Я знаю, как включить элементы управления, я ищу уведомление, когда элементы управления появляются и исчезают (например, когда пользователь касается экрана). - person Mark Smith; 18.03.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
  }
}
person RolandasR    schedule 26.09.2010
comment
Я имею в виду элементы управления плеером, которые отображаются в HUD поверх фильма. Они будут появляться и исчезать во время воспроизведения движения (например, когда пользователь нажимает на фильм). - person Mark Smith; 27.09.2010