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. Это не похоже на правильный ответ, но все выглядит и функционирует прямо с точки зрения пользователя.
Итак, я столкнулся с той же проблемой, и я почти уверен, что это происходит из-за этого:
Хорошо, 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, это решает проблему.