2015-05-27 3 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.

Я хочу отключить прокрутку страницыViewController и включить новую функцию прокрутки при открытии меню. И делайте противоположно, когда меню закрыто.

Дополнительный код:

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. Теперь распознаватель жеста работает. У меня возникла новая проблема, теперь я не могу пронести по экрану влево, прямо на моем диспетчере просмотра страниц, мне нужно добавить старый распознаватель жестов или удалить новый, который я добавил (который закрывает меню). –

+0

удалите распознаватель жестов, который добавляется в self.sourceViewController in side handleOffstagePan event –

ответ

0

Ребята! SO, решение вместо установки PageViewController в sourceVC вашего TransitionManager, установите для параметра 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 к sourveVS из transitionManageClass. 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 это логическое значение, которое показывает, когда меню открывается и закрывается!

Смежные вопросы