J'ai un contrôleur de navigation qui appuie un contrôleur de visualisation ( parent em>) contenant un uipageviewController ( pages em>). Maintenant, j'ai utilisé des gestes de panoramique / glisser pour basculer entre les enfants du contrôleur de la page. Cependant, je ne peux plus sauter le contrôleur parent em> -View à l'aide du geste de balayage de la bordure gauche de l'écran, car il est interprété comme un geste dans pages em>. p>
est-il possible d'accomplir ce balayage à pop lorsque le contrôleur de visualisation de gauche est montré? P>
Deux idées: P>
retour nil dans restreindre la zone tactile, comme décrit ici . p> li>
ol>
ou y a-t-il une manière plus simple? P>
pageViewController: ViewControllerbeforeViewController CODE> -> Ne fonctionne pas. P> LI>
5 Réponses :
J'ai eu un problème similaire dans l'un de mes projets et utilisé la méthode suivante. Dans mon cas, c'était l'un de ces menus côté gauche qui étaient vraiment populaires avant iOS 7.
Ma solution consistait à définir l'uoinavigationControllerdelegate, puis à mettre en œuvre les éléments suivants: p> En outre, vous avez besoin d'un crochet dans les reconnaissants de gestes de l'UIPAGEVIEWCONTROLLER. (Ils ne sont pas retournés par la propriété Gesurerecognizers pour un contrôleur de page de style de vue de la vue de défilement.) C'est gênant, mais la seule façon d'accéder à ceci est à itérer dans les reconnaissants de gestes de ScrollView et recherchez le geste de la pan. Puis définissez un pointeur et activer / désactiver si vous affichez ou non le contrôleur de vue de la vue gauche-gauche. P> Si vous souhaitez conserver le bon balayage activé, puis remplacez le geste de la poêle avec un Reconnaissance de gestes de panneaux sous-classée de votre choix pouvant reconnaître conditionnellement basé sur la direction du geste de la casserole. P> P>
J'ai eu la même situation que @smallwisdom, mais la manipulée différemment.
J'ai un contrôleur d'affichage dans ce scénario, lorsque je voulais glisser l'écran pour Pop View Controller La solution est assez simple. P> à l'intérieur de mon Afficher le contrôleur Ça fonctionne bien. Qu'est-ce que cela fait?
Il dit aux reconnaissants de gestes de ScrollView qu'ils doivent attendre pour voir si certains autres reconnaissants de geste em> reconnaîtront le geste actuel. P> si cela l'autre em> échoue Reconnaître, ils n'auront plus besoin d'attendre et ils peuvent essayer de reconnaître le geste actuel. P> Si cela Autre reconnaissance em> réussit et reconnaît le geste actuel, puis tous les Les reconnaissants de geste qui attendaient échoueront automatiquement. P> Ceci Autre reconnaissance de geste em> Ils doivent attendre sont définis pour être l'interactivepopgère de la navigation. Il est responsable des gestes de balayage à reviens. P> p> A code> que je pousse sur la pile de mon contrôleur de navigation.
Ce contrôleur d'affichage
A code> contient une vue de défilement horizontale qui s'étend du côté gauche de l'écran à droite. P>
A code> de la pile du contrôleur de navigation, tout ce que j'ai fini par faire était de faire défiler cette vue horizontale de défilement. p>
A code>, j'ai un code comme celui-ci: p>
C'est bien! Merci! Bien que dans mon cas, le reconnaissance _ContentscrollView ne soit que 20 pts ou plus de largeur, pas en plein écran avec comme dans votre cas. Parce que j'ai beaucoup d'autres reconnaissants à l'écran qui doivent fonctionner correctement. Mais Bravo pour cette douce solution!
Je suis surtout d'accord avec la réponse de @ Ancajic. Je tiens à fournir un cas supplémentaire lorsque vous définissez le TRANSITIONSTYLE UIPAGEVIEWCONTROLLER sur "Scroll", dans lequel vous n'obtiendrez pas que les épreuves d'accès à être définies, la solution de contournement est la suivante:
if (self.navigationController?.interactivePopGestureRecognizer != nil) { for view in self.pageViewController!.view.subviews { if let scrollView = view as? UIScrollView { scrollView.panGestureRecognizer.requireGestureRecognizerToFail(self.navigationController!.interactivePopGestureRecognizer!); } } }
Une petite suggestion, utilisez une liaison optionnelle, au lieu de la ponctuelle.
Premièrement, recherchez UIPAGEVIEWCONTROLLER'S SCROLLVIEW CODE>
override func viewDidLoad() {
super.viewDidLoad()
if let ges = navigationController?.interactivePopGestureRecognizer {
pageViewController.bk_scrollView?.panGestureRecognizer.require(toFail: ges)
}
}
Version SWIFT de la réponse de @ LCSKY:
if let interactivePopGesture = self.navigationController?.interactivePopGestureRecognizer, let pageViewController = self.swipeVC?.pageViewController { let subView = pageViewController.view.subviews for view in subView { if let scrollView = view as? UIScrollView{ scrollView.panGestureRecognizer.require(toFail: interactivePopGesture) } } }