2016-07-27 38 views
1

Ich habe 2 UIPageViewControllers in einem anderen, beide mit horizontalem Scroll. Ein Vollbild mit allen Benutzerinformationen, ein weiteres - eine Fotogalerie für diesen Benutzer. Verhalten: Wenn ich alle Benutzerfotos wische, wischt es den Vollbildmodus. Aber manchmal kann ich Fotos nicht wischen, scheint wie diese Geste blockiert ist, und es wischt nur den ersten Pager. Aber es öffnet sich, wenn ich die Wischgeste zurück mache. Hier ist ein Video, über das ich spreche: https://youtu.be/Hr7tDKNv15A Hilf mir, Fehler zu finden, der es verursacht, jetzt kann ich mir nicht vorstellen, wie ich das debuggen muss.2 UIPageViewControllers Gestenkonflikt

overrided hitTest der Containeransicht, die innere Pager speichert:

override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? { 
     if pointInside(point, withEvent: event) { 
      print("Inside") 
      print("Self view:\(self)") 
      print("Self subviewsview:\(self.subviews)") 
      print("Self subviewsview of subview:\(self.subviews[0].subviews)") 

      return self.subviews[0].subviews[0] 

     } else { 
      print("Outside") 
      return nil 
     } 

    } 

Das ist meine Ausgabe ist, wenn ich Fotos berühren:

Inside 
Self view:<armeniaApp.debugGesture: 0x7f7f8be46e60; frame = (0 0; 400 400); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7f7f8be1e7c0>> 
Self subviewsview:[<_UIPageViewControllerContentView: 0x7f7f8be920a0; frame = (0 0; 400 400); clipsToBounds = YES; opaque = NO; autoresize = W+H; layer = <CALayer: 0x7f7f89ff1e00>>] 
Self subviewsview of subview:[<_UIQueuingScrollView: 0x7f7f8a836e00; frame = (0 0; 400 400); clipsToBounds = YES; gestureRecognizers = <NSArray: 0x7f7f8be81db0>; layer = <CALayer: 0x7f7f8be522b0>; contentOffset: {400, 0}; contentSize: {1200, 400}>] 

So ist die Geste, die ich in UIQueuingScrollView Läden müssen aber was ich Müssen Sie als nächstes tun? return self.subviews[0].subviews[0] nicht

Antwort

1

ich requireGestureRecognizerToFail einen Blick würde schlage vor, hilft: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIGestureRecognizer_Class/#//apple_ref/occ/instm/UIGestureRecognizer/requireGestureRecognizerToFail:

Es scheint, wie UIKit ist immer verwirrt darüber, welche Seite-Controller, um die Gesten weitergeben als sie beide für zuhören wird das gleiche.

Ich könnte mir vorstellen, dass Sie die Gestenerkenner des äußeren Seitenaufruf-Controllers (zugänglich als Array-Eigenschaft: self.pageViewController.gestureRecognizers) benötigen, damit die Gestenerkenner des inneren Seitenaufruf-Controllers fehlschlagen. Auf diese Weise hat der Wischvorgang zwischen den Fotos Vorrang. Wenn jedoch keine weiteren Fotos angezeigt werden, können Sie zwischen den Profilen wischen.

+0

Kann das Gesten nicht zugreifen, und so werden Delegatmethoden nicht genannt: C In allen möglichen Plätzen sie sagt, dass GestureRecognizer Array (Irgendwelche Ideen leer –

+0

Sorry, entdeckte dies nur in der Dokumentation: „Nur wenn Übergang Stil bevölkerten ist 'UIPageViewControllerTransitionStylePageCurl'" –

+0

Sie könnten den 'hitTest:' überschreiben und sicherstellen, dass Berührungen im Inneren des Seitenaufruf-Controllers weitergeleitet werden, wenn weiter geblättert werden muss, aber alles andere wird an den äußeren Seitenaufruf-Controller weitergeleitet? –