2015-05-27 22 views
1

我把視圖控制器當作UIPageViewController裏面。如何選擇正確的UIGestureRecognizer?

使用pageviewcontroller我可以左右搖擺以轉到其他VC。有用!

所以,我添加sideBarMenu後。當加入這個菜單我使用此代碼添加手勢識別:

var menuViewController: UIViewController! { 
    didSet { 
     self.exitPanGesture = UIPanGestureRecognizer() 
     self.exitPanGesture.addTarget(self, action:"handleOffstagePan:") 
     self.sourceViewController.view.addGestureRecognizer(self.exitPanGesture) 

    } 

這裏sourceViewController是我原來的VC。

問題是當我嘗試滑動(爲了關閉菜單),pageViewController滑動工作。

我想禁用pageViewController刷卡並打開菜單時啓用新的刷卡功能。當菜單關閉時做相反的操作。

附加代碼:

func handleOffstagePan(pan: UIPanGestureRecognizer){ 
    println("dismiss pan gesture recognizer") 

    let translation = pan.translationInView(pan.view!) 

    let d = translation.x/CGRectGetWidth(pan.view!.bounds) * -0.5 

    switch (pan.state) { 

    case UIGestureRecognizerState.Began: 
     self.interactive = true 

     self.menuViewController.performSegueWithIdentifier("dismisMenu", sender: self) 

     break 
    case UIGestureRecognizerState.Changed: 
     self.updateInteractiveTransition(d) 
     break 
    default: 
     self.interactive = false 

     if d > 0.1 { 

      self.finishInteractiveTransition() 
     }else { 

      isMenuVisible = false 
      self.cancelInteractiveTransition() 
     } 
    } 

} 
+0

考慮你的問題我認爲目前handleOffstagePan事件不會被觸發,對嗎? –

+0

是的,你是!我找到了解決方案,而不是編寫sourviewcontroller = PageViewController,我寫了sourveviewcontroller = PageContentViewController。現在手勢識別器起作用了。我有新的問題,現在我不能左滑,右擊我的pageviewcontroller,我需要添加舊的手勢識別器,或刪除我添加的新的(關閉菜單) –

+0

刪除手勢識別器,它被添加到self.sourceViewController在旁邊handleOffstagePan事件 –

回答

0

傢伙! 因此,解決方案不是將PageViewController設置爲TransitionManager的sourceVC,而是將pageContentViewController設置爲sourceVC。 PageContentViewControler是:

func resetToMainPage(index: Int!) { 
    /* Getting the page View controller */ 
    mainPageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("MainPageViewController") as UIPageViewController 
    self.mainPageViewController.dataSource = self 
    self.mainPageViewController.delegate = self 

    let pageContentViewController = self.viewControllerAtIndex(index) 

    self.transtionManger.sourceViewController = pageContentViewController // adding swipe to the pageContentViewControlle in order to close menu 

    self.mainPageViewController.setViewControllers([pageContentViewController!], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil) 


    self.mainPageViewController.view.frame = CGRectMake(0, 102, self.view.frame.width, self.view.frame.height) 
    self.addChildViewController(mainPageViewController) 
    self.view.addSubview(mainPageViewController.view) 
    self.mainPageViewController.didMoveToParentViewController(self) 

} 

在這裏,我將pageContentVC設置爲transitionManageClass的sourveVS。 NExt如何選擇正確的GestureRecognizer。默認情況下,當您添加新的手勢識別器時,舊手勢不起作用。當你禁用新的手勢識別器時,舊手勢開始工作!我添加了新的手勢識別器使用代碼:

var menuViewController: UIViewController! { 
    didSet { 
     self.exitPanGesture = UIPanGestureRecognizer() 
     self.exitPanGesture.addTarget(self, action:"handleOffstagePan:") 
     // self.exitPanGesture.view?.userInteractionEnabled = false 
     self.sourceViewController.view.addGestureRecognizer(self.exitPanGesture) 

    } 
} 

在設置menuViewController之前,我設置了sourceViewController。所以,我在這裏添加新的手勢識別器到我的sourceViewController。接下來,一步是禁用此手勢識別。當您關閉菜單禁用它使用此代碼:

var presentingP:Bool!{ 
    didSet{ 
     if presentingP == true { 
      // enable the gesture recognizer only when the view of menucontroller is presented 

      self.exitPanGesture.view?.userInteractionEnabled = true 
     }else{ 
      // disable gesture recognizer when menu is not presented 
      self.exitPanGesture.view?.userInteractionEnabled = false 
      isMenuVisible = false 
     } 
    } 
} 

PresentingP是布爾值,它顯示菜單打開和關閉!