-
Notifications
You must be signed in to change notification settings - Fork 333
Conflicting Gestures
Grigorii Lutkov edited this page Apr 19, 2021
·
2 revisions
If you have scroll view, or any interactable elements inside LGSideMenuController
, they will work if swipeGestureArea == .borders
and you outside of swipeGestureArea
, otherwise gesture to open side view will take control.
If you need more space to interact with your view then you can decrease leftViewSwipeGestureRange
and rightViewSwipeGestureRange
, or disable them completely.
let sideMenuController = LGSideMenuController()
// It should be `.borders` by default, just double check it.
sideMenuController.swipeGestureArea = .borders
// By default they are equal to `44.0`.
sideMenuController.leftViewSwipeGestureRange = LGSideMenuController.SwipeGestureRange(left: 0.0, right: 20.0)
sideMenuController.rightViewSwipeGestureRange = LGSideMenuController.SwipeGestureRange(left: 20.0, right: 0.0)
// Use these properties to disable gestures.
sideMenuController.isLeftViewSwipeGestureEnabled = false
sideMenuController.isRightViewSwipeGestureEnabled = false
You can override UIGestureRecognizerDelegate
methods inside LGSideMenuController
:
// CustomSideMenuController.swift
class CustomSideMenuController: LGSideMenuController {
override func gestureRecognizer(_ gesture: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {}
override func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool {}
override func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {}
}
Default implementation is here: https://github.com/Friend-LGA/LGSideMenuController/blob/master/LGSideMenuController/Extensions/LGSideMenuController%2BGesturesHandler.swift
Also you can provide your own delegate objects:
// Your own custom delegate classes:
let tapGestureDelegate = CustomTapGestureDelegate()
let panGestureForLeftViewDelegate = CustomPanGestureForLeftViewDelegate()
let panGestureForRightViewDelegate = CustomPanGestureForRightViewDelegate()
// Be sure to assign these delegates after `LGSideMenuController` is loaded.
// Because currently default delegates are assigned inside `viewDidLoad` method.
// This might be improved in the future, but not the priority right now.
let sideMenuController = LGSideMenuController()
sideMenuController.tapGesture.delegate = tapGestureDelegate
sideMenuController.panGestureForLeftView.delegate = panGestureForLeftViewDelegate
sideMenuController.panGestureForRightView.delegate = panGestureForRightViewDelegate