From c53884751c008552a08e32295655baa234d69f5d Mon Sep 17 00:00:00 2001 From: Zishan J Date: Fri, 20 Jul 2018 01:01:03 +0500 Subject: [PATCH] handle outside tap --- Library/ENSideMenu.swift | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/Library/ENSideMenu.swift b/Library/ENSideMenu.swift index 61ba394..5a0bb2a 100644 --- a/Library/ENSideMenu.swift +++ b/Library/ENSideMenu.swift @@ -150,7 +150,9 @@ open class ENSideMenu : NSObject, UIGestureRecognizerDelegate { open var allowRightSwipe : Bool = true open var allowPanGesture : Bool = true fileprivate var panRecognizer : UIPanGestureRecognizer? - + /// View to handle tap outside menu + fileprivate var outterView : UIView? + /** Initializes an instance of a `ENSideMenu` object. @@ -173,6 +175,16 @@ open class ENSideMenu : NSObject, UIGestureRecognizerDelegate { panRecognizer!.delegate = self sourceView.addGestureRecognizer(panRecognizer!) + // Create view to handle tap event outside menu + outterView = UIView(frame: CGRect(x: sideMenuContainerView.frame.width, y: 0, + width: sourceView.frame.width - sideMenuContainerView.frame.width, + height: sourceView.frame.height)) + outterView!.backgroundColor = UIColor.clear + let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(ENSideMenu.hideSideMenu)) + outterView!.addGestureRecognizer(tapRecognizer) + outterView!.isUserInteractionEnabled = false + sourceView.addSubview(outterView!) + // Add right swipe gesture recognizer let rightSwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(ENSideMenu.handleGesture(_:))) rightSwipeGestureRecognizer.delegate = self @@ -225,6 +237,10 @@ open class ENSideMenu : NSObject, UIGestureRecognizerDelegate { height: height ) sideMenuContainerView.frame = menuFrame + + outterView?.frame = CGRect(x: sideMenuContainerView.frame.width, y: 0, + width: sourceView.frame.width - sideMenuContainerView.frame.width, + height: sourceView.frame.height) } fileprivate func adjustFrameDimensions( _ width: CGFloat, height: CGFloat ) -> (CGFloat,CGFloat) { @@ -273,6 +289,7 @@ open class ENSideMenu : NSObject, UIGestureRecognizerDelegate { } updateSideMenuApperanceIfNeeded() isMenuOpen = shouldOpen + outterView?.isUserInteractionEnabled = shouldOpen var width:CGFloat var height:CGFloat (width, height) = adjustFrameDimensions( sourceView.frame.size.width, height: sourceView.frame.size.height) @@ -484,7 +501,7 @@ open class ENSideMenu : NSObject, UIGestureRecognizerDelegate { /** Hides the side menu if the menu is showed. */ - open func hideSideMenu () { + @objc open func hideSideMenu () { if (isMenuOpen) { toggleMenu(false) }