4

Я пытаюсь использовать UITapGestureRecognizer, чтобы обрабатывать краны на моем полноэкранном видео. Если я опускаю [self.player setFullscreen:YES animated:NO];, он работает, но тогда мое видео не будет масштабироваться, чтобы соответствовать экрану.MpMovieplayerController распознаватель жестов касания не срабатывает, когда в полноэкранном режиме

С моей .m:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSString *videoPath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"mov"]; 
    player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:videoPath]]; 

    player.shouldAutoplay = NO; 
    player.view.frame = self.view.bounds; 
    player.scalingMode = MPMovieScalingModeAspectFit; 
    player.controlStyle = MPMovieControlStyleNone; 
    player.fullscreen = YES; 
    self.player = player; 
    [self.player prepareToPlay]; 

    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; 
    UIView *aView = [[UIView alloc] initWithFrame:player.view.bounds]; 
    [aView addGestureRecognizer:tapGesture]; 
    [self.player.view addSubview:aView]; 
} 

- (IBAction)playMovie:(id)sender { 
    //add the MPMoviePlayerViewController to this view (as subview) 
    //Play movie 
    [self.view addSubview:self.player.view]; 
    [self.player setFullscreen:YES animated:NO]; //commenting out this will make it work 
    [self.player play]; 
} 

- (void)handleTap:(UITapGestureRecognizer *)recognizer { 
    NSLog(@"tap tap"); 
} 

С моей .h:

@property (retain, nonatomic) MPMoviePlayerController *player; 
- (void)handleTap:(UITapGestureRecognizer *)recognizer; 
+0

При использовании Fullscreen, как вы делаете это, 'MPMoviePlayerController не реально использовать свой нормальный вид, но непосредственно играет на окно. Чтобы заставить ваш код работать и в полноэкранном режиме, вам нужно будет добавить этого распознавателя жестов, как только плеер переключится на полноэкранный режим. Вы бы хотели найти экземпляр MPMovieView в стеке просмотра окна и добавить его в это представление. – Till

ответ

1

В моем комментарии, я подготовил, как получить, что покрыт при использовании надлежащего полноэкранного режима ([self.player setFullscreen:YES animated:NO];).

Я бы предположил, что вместо этого вы просто изменяете размер плеера, чтобы покрыть весь экран, установив его рамку соответствующим образом.

Инициализирующий код должен был бы избавиться от этого player.fullscreen = YES;, но я догадываюсь, что это очевидно.

+0

Спасибо за предложение, похоже, это простое решение моей проблемы. Мне просто нужно было вычислить scaleFactor (по ширине), а также новое начало Y - и поместить их в функцию CGRectMake() - отлично работает! –

2

Вы можете попробовать это:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(willEnterFullScreen:) 
              name:MPMoviePlayerWillEnterFullscreenNotification 
              object:nil]; 

- (void)willEnterFullScreen:(NSNotification*)notification 
{ 
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; 
    UIView *aView = [[UIView alloc] initWithFrame:self.player.backgroundView.bounds]; 
    [aView addGestureRecognizer:tapGesture]; 
    [self.view.window addSubview:aView]; 
} 

, а затем удалить подвид когда MPMoviePlayerWillExitFullscreenNotification размещена

+0

Это также выглядит многообещающим, плохо попробуйте этот метод, а завтра, чтобы посмотреть, как он работает. Спасибо за предложение. –

 Смежные вопросы

  • Нет связанных вопросов^_^