2016-07-27 84 views
1

我有2個UIPageViewControllers一個在其他人,都與水平滾動。一個全屏,包含所有用戶信息,另一個 - 該用戶的照片庫。行爲:當我滑動所有用戶照片時,會滑動全屏。但有時候,我無法滑動照片,看起來像這個手勢被阻止,並且它只刷動第一個尋呼機。但是,當我重新滑動手勢時,它會解鎖。這裏是一個視頻,我正在談論的內容:https://youtu.be/Hr7tDKNv15A幫我找到導致它的錯誤,現在我無法想象我需要如何調試。2 UIPageViewControllers手勢衝突

容器視圖的Overrided則hitTest,存儲內部尋呼機:

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 
     } 

    } 

這是我的輸出,當我撫摸照片:

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}>] 

所以我需要在UIQueuingScrollView商店,但什麼手勢我需要做下一步? return self.subviews[0].subviews[0]不利於

回答

1

我建議考慮看看requireGestureRecognizerToFailhttps://developer.apple.com/library/ios/documentation/UIKit/Reference/UIGestureRecognizer_Class/#//apple_ref/occ/instm/UIGestureRecognizer/requireGestureRecognizerToFail

好像UIKit的是越來越糊塗哪個頁面控制器傳授給他們都將被監聽手勢一樣的東西。

我想象你想要外部頁面視圖控制器的手勢識別器(可作爲數組屬性:self.pageViewController.gestureRecognizers)來要求內部頁面視圖控制器的手勢識別器失敗。這樣照片之間的滑動優先,但如果沒有其他照片可以滑動到,則應該可以在配置文件之間滑動。

+0

無法訪問該手勢,因此不調用委託方法:C在任何地方,它表示gestureRecognizer數組爲空(任何想法? –

+0

對不起,只是在文檔中發現了這一點:「只有在過渡樣式是'UIPageViewControllerTransitionStylePageCurl'「 –

+0

你可以看看覆蓋'hitTest:'並確保在內部頁面視圖控制器中的觸摸進一步滾動時轉發給它,但其他所有內容都被轉發到外部頁面視圖控制器? –