UIPanGestureRecognizer conflit avec le scrollview
J'essaye d'ajouter une casserole geste de reconnaissance pour une vue contenant une scrollview, mais je suppose que j'ai des problèmes avec les priorités.
Mes UIView a un UIPanGestureRecognizer définir comme suit:
_bottomPanGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(bottomPanGestureDetected:)];
_bottomPanGestureRecognizer.minimumNumberOfTouches = 2;
_bottomPanGestureRecognizer.maximumNumberOfTouches = 2;
_bottomPanGestureRecognizer.delaysTouchesBegan = NO;
_bottomPanGestureRecognizer.delaysTouchesEnded = NO;
Je tiens à saluer ce geste pour afficher une autre vue depuis le fond avec une sorte de pincement terre-à-up.
Le problème est que la scrollview est la reconnaissance de sa propre pan geste avant le mien.
J'ai donc essayé de retarder grâce à:
[_scrollView.panGestureRecognizer requireGestureRecognizerToFail:_bottomPanGestureRecognizer];
Et il du travail, la scrollview événement est déclenché après mes deux doigt vers le bas pour jusqu'reconnaissance, mais le problème est que maintenant, quand je utiliser un seul doigt pour faire défiler dans la scrollview, le défilement fonctionne après un petit retard.
Je voudrais ne pas avoir de retard pour cet événement, est-ce possible? Toute idée bienvenue!
Acclamations.
Cyril
- Avez-vous essayé de mettre
maximumNumberOfTouches
de_scrollView.panGestureRecognizer
à1
? - Oui, mais étrangement, il semble que cette condition est ignoré.
- Eh bien, une autre option est de mettre en œuvre
UIGestureRecognizerDelegate
'sgestureRecognizerShouldBegin:
et vérifiez le numéro de la touche on. Donc, si c'est deux touches,return NO
- Pas de travail à cause de cela: "UIScrollView intégré dans le moule geste de reconnaissance doit avoir son défilement vue comme délégué.". Il semble être impossible de remplacer le scrollview geste de reconnaissance délégué. Une autre idée?
- Avez-vous trouvé une solution pour cela? je suis en train de vivre le même problème
Vous devez vous connecter pour publier un commentaire.
Dans le cas où il n'est pas encore résolus, j'ai résolu le problème pour moi.
J'ai ajouté un UIPanGestureRecognizer à un UIScrollView de détecter deux doigt de pan gestes et la valeur par défaut UIScrollView comportement (défilement pour quelque chose) encore workes.
Donc ce que j'ai fait est d'ajouter la UIPanGestureReconizer à la UIScrollView:
Après ce que j'ai ajouté le code:
Après cela, j'ai mis en place la casserole geste des modules de reconnaissance de la méthode d'action.
Mise à JOUR:
Dans le cas où vous souhaitez intégrer le mouvement de balayage en arrière de la fonctionnalité de votre navigationcontroller, vous devez intégrer le code suivant:
et
Mettre en œuvre panRecognizer délégué à activer simultanément reconnaître UIScrollView UIGestureRecognizer
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { if let scrollView = otherGestureRecognizer.view as? UIScrollView { return scrollView.contentOffset.x == 0 } return false }
SWIFT 4
Si vous utilisez un scrollView vous pouvez utiliser ci-dessous, il est seulement un panGestureRecognizer lorsqu'un scrollView se déplaçant à très haut:
traduction.y > 0 signifie que vous vous déplacez de haut en bas et de
locationInScrollView.y < 500.0 signifie que vous fin les faisant glisser à 500 ou moins (vous pouvez la personnaliser) pour éviter que l'actualisation se fait en milieu ou en bas du parchemin.