5

我正在尝试在 MPMoviePlayerController 视图(OS 2.x 及更高版本)中的标准倒带/播放/前进控件的左侧和右侧添加自定义按钮。我已经想出了如何将它们添加到播放器窗口,但它们总是可见的。有没有办法检测标准控件何时出现和消失?

4

4 回答 4

10

好的,明白了,像这样:

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视图实例的 alpha == 0.0,如果控件显示,则为 alpha 1.0。您可以根据需要添加观察者并触发事物。我知道这并不优雅,但它对我有用,因为 Apple 没有记录任何关于此任务的内容。

干杯...

于 2011-03-18T14:35:30.333 回答
1

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 控件的标签,所以它会更准确地工作。

于 2016-01-06T16:50:23.267 回答
0

查看movieControlMode 属性。您可以设置 MPMovieControlMode

MPMovieControlMode 用于显示电影播放控件的选项。

typedef enum {
   MPMovieControlModeDefault,
   MPMovieControlModeVolumeOnly,
   MPMovieControlModeHidden
} 

MPMovieControlMode;

您还可以查看 MPMoviePlayerScalingModeDidChangeNotification

于 2010-03-18T00:27:11.080 回答
0

在 iOS3.2 之前
检测“disapierance”很容易:

[[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
  }
}
于 2010-09-26T20:22:11.890 回答