iPhone MPMoviePlayer 컨트롤이 나타나거나 사라질 때 감지하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/2466829

문제

MPMoviePlayerController보기 (OS 2.X 이상)에서 표준 되감기/재생/전방 컨트롤의 왼쪽과 오른쪽에 사용자 정의 버튼을 추가하려고합니다. 플레이어 창에 추가하는 방법을 알아 냈지만 항상 눈에 띄게 나타납니다. 표준 컨트롤이 나타나고 사라질 때 감지하는 방법이 있습니까?

도움이 되었습니까?

해결책

좋아, 얻었다.

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이됩니다. 필요에 따라 관찰자를 추가하고 발사 할 수 있습니다. 나는 우아하지 않다는 것을 알고 있지만 애플 이이 과제와 관련하여 아무것도 기록하지 않았기 때문에 그것은 나에게 효과적이다.

건배 ...

다른 팁

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 컨트롤의 태그이므로보다 정확하게 작동합니다.

MovieControlmode 속성을 살펴보십시오. mpmoviecontrolmode를 설정할 수 있습니다

영화 재생 컨트롤을 표시하기위한 MPMoviecontrolmode 옵션.

typedef enum {
   MPMovieControlModeDefault,
   MPMovieControlModeVolumeOnly,
   MPMovieControlModeHidden
} 

mpmoviecontrolmode;

MPMoviePlayerscalingModedIdChangenotification을 확인할 수도 있습니다

사전 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
  }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top