MPMoviePlayerController de vue ne reconnaît pas les toucher
C'est mon code:
_mediaPlayer = [[MPMoviePlayerController alloc] init];
_mediaPlayer.controlStyle = MPMovieControlStyleNone;
_mediaPlayer.shouldAutoplay = NO;
[_mediaPlayer.view setFrame: CGRectMake(5, 5, 600,400)];
[playerHolder addSubview: _mediaPlayer.view];
//
[self prepareScreenContentToPlay];
//
UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleRollTap:)];
singleFingerTap.numberOfTapsRequired = 1;
[_mediaPlayer.view addGestureRecognizer:singleFingerTap];
[singleFingerTap release];
Et une méthode d'action pour le geste de reconnaissance:
-(void)handleRollTap:(UITapGestureRecognizer*)sender{
NSLog(@"%@", @"touch");
}
MPMoviePlayerController fonctionne très bien. En plus j'ai envie de gérer touch sur MPMoviePlayerController point de vue, mais handleRollTap
ne s'est jamais appelé. Pourquoi MPMoviePlayerController de vue fonctionne pas avec UITapGestureRecognizer?
OK. Si singleFingerTap.numberOfTapsRequired = 2;
puis tout fonctionne très bien. Mais rien pour seul robinet..
- Pourquoi êtes-vous l'ajouter à la backgroundView au lieu de la vue?
- J'ai essayé les deux cas avec
view
etbackgroundView
. backgroundView est le dernier cas, maintenant j'ai encore du changer de point de vue.
Vous devez vous connecter pour publier un commentaire.
En fait, la réponse à cela est simple:
par exemple
et d'autre part dans le code:
MPMoviePlayerController a une sous-vue qui prend toute sa limites, et que la sous-vue a 3 modules de reconnaissance de geste sur elle (iOS 4.3).
sera de sortie:
Donc il est déjà un GestureRecognizer qui ne gère qu'un seul robinet, mais ce n'est pas un UITapGestureRecognizer, mais un MPTapGestureRecognizer (une coutume de reconnaissance pour l'acteur de cinéma).
Si vous créez une vue générique et l'ajouter à l'acteur de cinéma de vue de la hiérarchie, vous pouvez ajouter de petites touches, mais il bloque la touche de l'acteur de cinéma (donc un seul robinet de ne pas rendre les boutons disparaissent).
par exemple
Cette obtiendrez de votre robinet, mais vous casser les contrôles. Il reste peut-être une façon pour lui permettre d'interagir avec les autres gestes.
Juste pour partager mon approche différente pour ajouter une UISwipeGestureRecognizer à la vue du lecteur, sans l'ajout d'un affichage personnalisé:
C'est pour remplacer la méthode classique de l'appelant
car il fonctionne uniquement sur iPad non-mode plein écran et sur iPhone. Lorsque le joueur passe en mode plein écran sur l'iPad, le geste ne fonctionne pas
swipeGesture
! De sorte qu'il conserve le robinet geusture à garder à disposition le Joueur contrôle! Bravo! (Y)Vous pouvez utiliser
UIView
UITouch
événement pour cette.Prendre un
UIView
et mettreMPMoviePlayerController
à l'intérieur qu':Utilisation
UIView
touch délégué méthodesOù
startPosition
est unCGPoint
déclaré dans.h
fichier.La cause racine est le nouveau geste de reconnaissance doit être ajouté sur MPVideoBackgroundView, qui est une sous-vue de MPMoviePlayerController vue.
Avec la dernière variante de la MPMoviePlayerController la solution retenue n'a toujours pas de travail pour moi.
J'ai aussi essayé "piratage de la UIView pile", et en y ajoutant mes propres UIView avec des modules de reconnaissance de geste. Mais tout cela n'a pas fonctionné.
J'ai finalement mis en œuvre cette solution: 'Primordial UIAplication", qui semble une sur le dessus façon de le faire, mais en tout cas ça fonctionne. Ajoutez simplement une sorte de drapeau ou de lui déléguer lorsque vous détectez un événement de touche, et vous pouvez ensuite arrêter le film.
devdavid a la bonne idée, mais sa solution n'a pas fonctionné pour moi. Je suppose que dans les versions plus récentes du joueur il y a d'autres points de vue au-dessus de l'acteur de cinéma de vue.
Ce que j'ai fait, c'est plutôt ajouter un
UIView
au-dessus de l'acteur de cinéma de vue. Cela permettra d'éviter tous les gestes de toujours par le joueur, mais qui a été le point de l'ensemble que je ne voulais pas de contrôles visibles.