Проблема с наложением поверх MPMoviePlauerViewController - PullRequest
1 голос
/ 16 августа 2011

У меня есть контроллер просмотра видеоплеера, к которому я хочу добавить наложение поверх него.

Я использовал следующий код:

- (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;
}

overlayControlsView в настоящее время является только 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];
        }
    }
}

Когда видеопроигрыватель только что отображается, нажатие на него вызывает отображение и скрытие overlayControlsView.

Однако, сразу после того, как состояние загрузки moviewplayer изменилось и начинает воспроизводиться (я загружаю видео из Интернета, и поэтому здесь есть некоторый промежуток времени), метод handleTap больше не вызывался.

У кого-нибудь есть идеи по этому поводу? Есть ли лучший способ добавить элементы управления наложением?

1 Ответ

1 голос
/ 16 августа 2011

Я не знаю, что не так с вашим кодом;здесь есть альтернатива выполнения оверлея, используя пользовательскую кнопку

- (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];
    } }
...