MMDrawerController не может закрыть ящик

Я пытаюсь использовать MMDrawerController в своем приложении, но не могу закрыть боковой ящик жестами в центре. Я использовал MMDrawerController где-то еще в своем приложении с большим успехом, но не могу понять, почему он не работает в этом случае.

Контроллер представления верхнего уровня представляет собой UINavigationController, контроллер представления которого по умолчанию является MasterViewController (источник ниже). Этот класс расширяет MMDrawerController и настраивает представление для того, что я хочу (по центру и справа, жесты закрытия, максимальная ширина). В центре окна есть кнопка, открывающая ящик. Когда ящик открыт, я не могу закрыть его жестами в центре. Я добавил кнопку в ящик, и он может закрывать ящик программно, но мне нужно иметь возможность перемещать / перемещать изображение в центре.

Класс MasterViewController: MMDrawerController {

override func viewDidLoad() {
    let centerView = storyboard!.instantiateViewControllerWithIdentifier("CenterControllerName") as? CenterControllerType
    super.setCenterViewController(centerView, withCloseAnimation: false, completion: nil)
    let drawer = storyboard!.instantiateViewControllerWithIdentifier("Drawer") as? DrawerType
    super.rightDrawerViewController = drawer
    super.setMaximumRightDrawerWidth(200, animated: true, completion: nil)
    super.closeDrawerGestureModeMask = MMCloseDrawerGestureMode.PanningCenterView | MMCloseDrawerGestureMode.TapCenterView
}

}

Функция, чтобы открыть ящик:

@IBAction func drawerButtonPressed(sender: AnyObject) {
    drawer?.openDrawerSide(MMDrawerSide.Right, animated: true, completion: nil)
}

2 ответа

Решение

Я смог обойти это, поместив ContainerView в качестве единственного объекта в моем представлении, а затем сконфигурировав MMDrawerContainer из моего ViewController. Это не похоже на правильный ответ, но все выглядит и функционирует прямо с точки зрения пользователя.

Итак, я столкнулся с той же проблемой, и я почти уверен, что это происходит из-за этого:

guddrawing.png

Хорошо, VC1 (со звездочкой) - это наше приложение Home, VC2 - это левый ящик, а VC3 - это DrawerController.

В течение долгого времени я пытался поместить функции жестов в VC1 и VC2, но только открытие в VC1 и закрытие в VC2 будет работать. Функции, которые я использовал в VC1:

let rightSwipe = UISwipeGestureRecognizer(target: self, action: Selector("showDrawer:"))

rightSwipe.direction = .Right
view.addGestureRecognizer(rightSwipe)

...

  func showDrawer(sender: UISwipeGestureRecognizer) {
    if let m = mmdc {
      if !m.isLeftDrawerOpen() {
        m.toggleDrawerSide(MMDrawerSide.Left, animated: true, completion: nil)
      }
    }
  }

И тот же самый в VC2, но с LeftSwipe и closeDrawer.

Решение состоит в том, чтобы поместить обе эти функции и распознаватель жестов в VC3 (DrawerController).

Проблема заключается в том, что ваши жесты определены для данного VC, но когда вы открываете ящик, он заменяет текущий VC новым, и предыдущий VC просто отображается, но не может взаимодействовать с ним. Помещая вещи в parentVC VC1/VC2, это решает проблему.

Другие вопросы по тегам