2017-02-01 2 views
0

J'ai un UIViewController qui contient un UIPageViewController qui utilise le style de défilement. Les utilisateurs peuvent parcourir les pages comme d'habitude. Maintenant, je veux ajouter un UISwipeGestureRecognizer deux doigts au contrôleur de vue extérieure qui contient le contrôleur de vue de la page. Je veux que les utilisateurs puissent balayer un doigt pour changer de page et balayer deux doigts pour déclencher une autre action. Mais par défaut, lorsque vous balayez avec deux doigts, iOS fait défiler les pages et ignore le geste des deux doigts. Pour résoudre ce problème, je définis le pageViewController.scrollView.panGestureRecognizer pour que le geste de balayage à deux doigts échoue. Ensuite, il reconnaîtra les deux comme vous le souhaitez, mais le problème est qu'il est difficile pour un doigt de faire défiler rapidement les pages car il attend que le balayage à deux doigts échoue. Il ignore une grande partie de votre entrée de balayage, donc vous devez vraiment appuyer et maintenir pendant un moment avant que vous ne balayez un doigt pour changer de page. J'ai également essayé de régler le minimumNumberOfTouches et le du à 1 mais il se comporte de la même manière.Éviter les conflits avec le geste de balayage à deux doigts et UIPageViewController

Que puis-je faire pour que cela fonctionne bien, pour reconnaître seulement le glissement des deux doigts lorsque je glisse avec deux doigts, mais ne tarde pas à reconnaître le glissement d'un doigt pour changer de page?

Répondre

0

Tout d'abord, vous devez vous assurer que le UISwipeGestureRecognizer reconnaître en même temps que le panGestureRecognizer en utilisant UIGestureRecognizerDelegate

func gestureRecognizer(UIGestureRecognizer, shouldRecognizeSimultaneouslyWith: UIGestureRecognizer) { 
    return true 
} 

Ensuite, lorsque la méthode d'action de vos deux doigts UISwipeGestureRecognizer est appelé, réinitialiser le panGestureRecognizer manuellement.

pageViewController.scrollView.panGestureRecognizer.isEnabled = false 
pageViewController.scrollView.panGestureRecognizer.isEnabled = true