Skip to content

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

For experienced users

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
Clone this wiki locally