如何检测 iPhone MPMoviePlayer 控件何时出现/消失?

Posted

技术标签:

【中文标题】如何检测 iPhone MPMoviePlayer 控件何时出现/消失?【英文标题】:How to detect when iPhone MPMoviePlayer controls appear/disappear? 【发布时间】:2010-03-18 00:17:22 【问题描述】:

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

【问题讨论】:

【参考方案1】:

好的,明白了,就这样吧:

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 没有记录任何有关此任务的内容。

干杯...

【讨论】:

喜欢你的方法..!!并为此 +1【参考方案2】:

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

【讨论】:

上帝保佑你先生!【参考方案3】:

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

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

typedef enum 
   MPMovieControlModeDefault,
   MPMovieControlModeVolumeOnly,
   MPMovieControlModeHidden
 

MPMovieControlMode;

您还可以查看 MPMoviePlayerScalingModeDidChangeNotification

【讨论】:

我知道如何启用控件,我正在寻找的是控件出现和消失时的通知(例如,当用户点击屏幕时)。【参考方案4】:

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
  

【讨论】:

我指的是出现在电影顶部的 HUD 中的播放器控件。这些将在播放移动时出现和消失(例如,当用户点击电影时)。

以上是关于如何检测 iPhone MPMoviePlayer 控件何时出现/消失?的主要内容,如果未能解决你的问题,请参考以下文章

删除/清除以前的缓冲区/流视频 mpmovieplayer iphone

iPhone开发mpmovieplayer崩溃

不使用 MPMoviePlayer 在 iPhone 上动画图像(如电影)的方法

iPhone:MPMoviePlayer 最初在几分之一秒内显示黑色背景

横向模式下的 iPhone MPMoviePlayer

MPMoviePlayer 声音在模拟器和 ipad 设备中工作,但在 iPhone 设备中不工作