Objective c MPMoviePlauerViewController顶部的覆盖问题

Objective c MPMoviePlauerViewController顶部的覆盖问题,objective-c,ios,mpmovieplayer,Objective C,Ios,Mpmovieplayer,我有一个电影播放器视图控制器,我想在上面添加一个覆盖视图 我使用了以下代码: - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization [[movieP

我有一个电影播放器视图控制器,我想在上面添加一个覆盖视图

我使用了以下代码:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
  self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
  if (self) {
      // Custom initialization
      [[moviePlayer view] addSubview:[self overlayControlsView]];

      UIGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
      [[self view] addGestureRecognizer:tap];
  }
  return self;
}
OverlyControlsView当前只是一个UILabel

- (void)handleTap:(UITapGestureRecognizer *)sender {
    NSLog(@"Tap handled");
    if ([sender state] == UIGestureRecognizerStateEnded) {
        if ([[self overlayControlsView] isHidden]) {
            [[self overlayControlsView] setHidden:NO];
        } else {
            [[self overlayControlsView] setHidden:YES];
        }
    }
}
当电影播放器刚刚显示时,点击它会导致OverlyControlsView成功显示和隐藏

但是,在moviewplayer加载状态更改并开始播放(我从Internet加载视频,因此这里有一些时间间隔)之后,handleTap方法就不再被调用了


有人知道吗?有没有更好的方法来添加覆盖控件?

我不知道你的代码有什么问题;下面是一个使用自定义按钮实现覆盖控制的替代方法

- (void)viewDidLoad {
    [super viewDidLoad];
    NSString *urlString = [[NSBundle mainBundle] pathForResource:@"sample-video" ofType:@"mov"];
    player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:urlString]];
    UIButton *overlayView = [UIButton buttonWithType:UIButtonTypeCustom];
    [overlayView setTitle:@"" forState:UIControlStateNormal];
    [overlayView setTitle:@"Play" forState:UIControlStateSelected];
    [overlayView addTarget:self action:@selector(handleTap:) forControlEvents:UIControlEventTouchUpInside];
    player.view.frame = CGRectMake(50, 50, 200, 250);
    overlayView.frame = player.view.frame;
    [player.view addSubview:overlayView];
    player.controlStyle = MPMovieControlStyleNone;
    [self.view addSubview:player.view];
     }


- (void)handleTap:(id *)sender {
    UIButton *btn = (UIButton *)sender;
    if (btn.selected) {
        [player play];
        [btn setSelected:NO];
    }
    else {
        [player pause];
        [btn setSelected:YES];
    } }

我不知道你的代码有什么问题;下面是一个使用自定义按钮实现覆盖控制的替代方法

- (void)viewDidLoad {
    [super viewDidLoad];
    NSString *urlString = [[NSBundle mainBundle] pathForResource:@"sample-video" ofType:@"mov"];
    player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:urlString]];
    UIButton *overlayView = [UIButton buttonWithType:UIButtonTypeCustom];
    [overlayView setTitle:@"" forState:UIControlStateNormal];
    [overlayView setTitle:@"Play" forState:UIControlStateSelected];
    [overlayView addTarget:self action:@selector(handleTap:) forControlEvents:UIControlEventTouchUpInside];
    player.view.frame = CGRectMake(50, 50, 200, 250);
    overlayView.frame = player.view.frame;
    [player.view addSubview:overlayView];
    player.controlStyle = MPMovieControlStyleNone;
    [self.view addSubview:player.view];
     }


- (void)handleTap:(id *)sender {
    UIButton *btn = (UIButton *)sender;
    if (btn.selected) {
        [player play];
        [btn setSelected:NO];
    }
    else {
        [player pause];
        [btn setSelected:YES];
    } }

对不起,可能是我描述错了。但我想做的是在我点击播放器时显示/隐藏覆盖视图(想想默认控件和我的自定义覆盖视图,这样它们就会与默认控件一起淡入/淡出)。您的在顶部有一个按钮,单击它将播放/暂停视频,这不是我想要的。@PeterWong,播放/暂停只是显示覆盖控件的一个示例,我想您可以将其用于显示/隐藏覆盖视图。。。在MPMoviePlayerController视图上使用UIGestureRecognitor时,我也遇到了同样的问题。。选择了这种方式。所以它会是一个无形的按钮,在整个播放器的顶部等待点击?这看起来很棒。我明天会试一试。对不起,可能是我描述错了。但我想做的是在我点击播放器时显示/隐藏覆盖视图(想想默认控件和我的自定义覆盖视图,这样它们就会与默认控件一起淡入/淡出)。您的在顶部有一个按钮,单击它将播放/暂停视频,这不是我想要的。@PeterWong,播放/暂停只是显示覆盖控件的一个示例,我想您可以将其用于显示/隐藏覆盖视图。。。在MPMoviePlayerController视图上使用UIGestureRecognitor时,我也遇到了同样的问题。。选择了这种方式。所以它会是一个无形的按钮,在整个播放器的顶部等待点击?这看起来很棒。我明天要试试。