10 votes

AVPlayer UITapGestureRecognizer ne fonctionne pas

J'ai ce code pour mon AVPlayerViewController .

UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAvPlayer)];
[self.avPlayerViewController.view addGestureRecognizer:tap];

mais cela ne fonctionne pas :S, j'ai essayé de paramétrer

[self.avPlayerViewController.view setUserInteractionEnabled:YES];

Toujours rien de bon

La seule solution qui fonctionne est d'utiliser UIGestureRecognizer et mettre en œuvre son shouldReceiveTouch et vérifier si le lecteur av est touché mais le problème est que nous ne voulons pas capturer l'événement "tap release" parce que si le av player est juste touchée, elle exécute immédiatement le code et ce n'est pas ce que nous voulions...

S'il vous plaît aidez-nous avec ce problème..

Gracias.

8voto

TyR Points 454

L'emplacement correct pour la gestion des gestes sur un AVPlayerViewController se trouve à l'intérieur de l'interface du contrôleur. contentOverlayView .

contentOverlayView est une propriété en lecture seule de AVPlayerViewController. Il s'agit d'une vue qui s'affiche au-dessus de la vidéo, mais sous le contrôleur. C'est l'endroit idéal pour la gestion du toucher. Vous pouvez y ajouter des sous-vues ou des gestionnaires de gestes au moment du chargement.

Le code suivant offre à votre contrôleur vidéo une prise en charge tactile de deux manières, afin de démontrer les approches de reconnaissance des gestes et de UIButton.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"mySegue"])
    {
        // Set things up when we're about to go the the video
        AVPlayerViewController *avpvc = segue.destinationViewController;
        AVPlayer *p = nil;
        p = [AVPlayer playerWithURL:[NSURL URLWithString:@"https://my-video"]];
        avpvc.player = p;

        // Method 1: Add a gesture recognizer to the view
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myAction:)];
        avpvc.contentOverlayView.gestureRecognizers = @[tap];

        // Method 2: Add a button to the view
        UIButton *cov = [UIButton buttonWithType:UIButtonTypeCustom];
        [cov addTarget:self action:@selector(myAction:) forControlEvents:UIControlEventTouchUpInside];
        cov.frame = self.view.bounds;
    }
}

(je n'ai pas vraiment envie d'écrire une version Swift pour le moment, désolé :)

5voto

Radu Points 1257

Cela devrait le faire. Ajoutez plutôt le recognizer à la sous-vue du lecteur :

[videoPlayerViewController.view.subviews[0] addGestureRecognizer:tap]

Il s'agit d'une solution rapide pour les interfaces utilisateur et les gestes complexes. contentOverlayView voir la réponse de TyR

0voto

Avinash Sharma Points 319

Pour autant que je sache, ce que vous voulez vraiment c'est

UILongPressGestureRecognizer

Parce que,

UITapGestureRecognizer

Il n'y a pas de type d'événement de libération, si vous ajoutez l'événement de libération.

UILongPressGestureRecognizer

à votre

avPlayerViewController

Ensuite, dans

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
  if ( [gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]] ) {

  }
  return YES;
}

Vous pouvez ensuite définir la durée minimale du geste pour avoir une meilleure sensation,

[holdGesture setMinimumPressDuration:0.01]

Vous pouvez ensuite mettre en œuvre la méthode,

- (void)holdAction:(UILongPressGestureRecognizer *)holdRecognizer

Ensuite, vérifiez l'état de la machine de reconnaissance et effectuez la fonctionnalité souhaitée.

0voto

Lion Points 19154

Vous pouvez ajouter transparent vue sur avplayerViewController et peut ajouter tapgesturerecognizer sur cette vue. J'espère que cela vous aidera :)

0voto

Vinu David Jose Points 283

La solution facile est d'ajouter une vue gestuelle sur la même vue du support de film après avoir ajouté le lecteur de film. Il n'est pas nécessaire d'ajouter la reconnaissance des gestes directement au lecteur de films.

  [self.movieHolderView addSubview:self.moviePlayer.view];

  [self.movieHolderView addSubview:self.gestureView];
  [self.movieHolderView bringSubviewToFront:self.gestureView];

Maintenant nous pouvons ajouter notre Gesture recognizer sur la vue du geste comme ceci

self.fullScreenTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapHandler:)];
self.fullScreenTapGesture.numberOfTapsRequired = 1;
[self.gestureView addGestureRecognizer:self.fullScreenTapGesture];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X