diff --git a/Pod/Classes/SideMenuManager.swift b/Pod/Classes/SideMenuManager.swift index 518fd5c..5e7482a 100644 --- a/Pod/Classes/SideMenuManager.swift +++ b/Pod/Classes/SideMenuManager.swift @@ -97,12 +97,6 @@ open class SideMenuManager : NSObject { /// The radius of the shadow around the menu view controller or existing view controller depending on the `menuPresentMode`. Default is 5. open static var menuShadowRadius: CGFloat = 5 - /// The left menu swipe to dismiss gesture. - open static weak var menuLeftSwipeToDismissGesture: UIPanGestureRecognizer? - - /// The right menu swipe to dismiss gesture. - open static weak var menuRightSwipeToDismissGesture: UIPanGestureRecognizer? - /// Enable or disable interaction with the presenting view controller while the menu is displayed. Enabling may make it difficult to dismiss the menu or cause exceptions if the user tries to present and already presented menu. Default is false. open static var menuPresentingViewControllerUserInteractionEnabled: Bool = false @@ -221,6 +215,30 @@ open class SideMenuManager : NSObject { } } + /// The left menu swipe to dismiss gesture. + open static weak var menuLeftSwipeToDismissGesture: UIPanGestureRecognizer? { + didSet { + oldValue?.view?.removeGestureRecognizer(oldValue!) + setupGesture(gesture: menuLeftSwipeToDismissGesture) + } + } + + /// The right menu swipe to dismiss gesture. + open static weak var menuRightSwipeToDismissGesture: UIPanGestureRecognizer? { + didSet { + oldValue?.view?.removeGestureRecognizer(oldValue!) + setupGesture(gesture: menuRightSwipeToDismissGesture) + } + } + + fileprivate class func setupGesture(gesture: UIPanGestureRecognizer?) { + guard let gesture = gesture else { + return + } + + gesture.addTarget(SideMenuTransition.self, action:#selector(SideMenuTransition.handleHideMenuPan(_:))) + } + fileprivate class func setupNavigationController(_ forMenu: UISideMenuNavigationController?, leftSide: Bool) { guard let forMenu = forMenu else { return @@ -228,7 +246,6 @@ open class SideMenuManager : NSObject { if menuEnableSwipeGestures { let exitPanGesture = UIPanGestureRecognizer() - exitPanGesture.addTarget(SideMenuTransition.self, action:#selector(SideMenuTransition.handleHideMenuPan(_:))) forMenu.view.addGestureRecognizer(exitPanGesture) if leftSide { menuLeftSwipeToDismissGesture = exitPanGesture diff --git a/Pod/Classes/SideMenuTransition.swift b/Pod/Classes/SideMenuTransition.swift index 1d32fec..fcf0141 100644 --- a/Pod/Classes/SideMenuTransition.swift +++ b/Pod/Classes/SideMenuTransition.swift @@ -304,6 +304,8 @@ open class SideMenuTransition: UIPercentDrivenInteractiveTransition { if statusBarOffset >= CGFloat.ulpOfOne { statusBarFrame.size.height = statusBarOffset } + SideMenuTransition.tapView?.transform = .identity + SideMenuTransition.tapView?.bounds = mainViewController.view.bounds SideMenuTransition.statusBarView?.frame = statusBarFrame SideMenuTransition.statusBarView?.alpha = 1 @@ -329,6 +331,9 @@ open class SideMenuTransition: UIPercentDrivenInteractiveTransition { if SideMenuManager.menuPresentMode != .viewSlideOut { mainViewController.view.transform = CGAffineTransform(scaleX: SideMenuManager.menuAnimationTransformScaleFactor, y: SideMenuManager.menuAnimationTransformScaleFactor) + if SideMenuManager.menuAnimationTransformScaleFactor > 1 { + SideMenuTransition.tapView?.transform = mainViewController.view.transform + } mainViewController.view.alpha = 1 - SideMenuManager.menuAnimationFadeStrength } } @@ -478,6 +483,9 @@ extension SideMenuTransition: UIViewControllerAnimatedTransitioning { container.insertSubview(tapView, aboveSubview: topView) tapView.bounds = container.bounds tapView.center = topView.center + if SideMenuManager.menuAnimationTransformScaleFactor > 1 { + tapView.transform = topView.transform + } SideMenuTransition.tapView = tapView } if let statusBarView = SideMenuTransition.statusBarView { diff --git a/Pod/Classes/UISideMenuNavigationController.swift b/Pod/Classes/UISideMenuNavigationController.swift index 4d0f542..48e5761 100644 --- a/Pod/Classes/UISideMenuNavigationController.swift +++ b/Pod/Classes/UISideMenuNavigationController.swift @@ -66,6 +66,27 @@ open class UISideMenuNavigationController: UINavigationController { } } + override open func viewWillDisappear(_ animated: Bool) { + super.viewWillDisappear(animated) + + // when presenting a view controller from the menu, the menu view gets moved into another transition view above our transition container + // which can break the visual layout we had before. So, we move the menu view back to its original transition view to preserve it. + if !isBeingDismissed { + if let mainView = presentingViewController?.view { + switch SideMenuManager.menuPresentMode { + case .viewSlideOut, .viewSlideInOut: + mainView.superview?.insertSubview(view, belowSubview: mainView) + case .menuSlideIn, .menuDissolveIn: + if let tapView = SideMenuTransition.tapView { + mainView.superview?.insertSubview(view, aboveSubview: tapView) + } else { + mainView.superview?.insertSubview(view, aboveSubview: mainView) + } + } + } + } + } + override open func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) diff --git a/SideMenu.podspec b/SideMenu.podspec index 09bbbf8..d62ab0c 100644 --- a/SideMenu.podspec +++ b/SideMenu.podspec @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.name = "SideMenu" - s.version = "2.3.0" + s.version = "2.3.1" s.summary = "Simple side menu control for iOS in Swift inspired by Facebook. Right and Left sides. No coding required." # This description is used to generate tags and improve search results. diff --git a/SideMenu.xcodeproj/project.pbxproj b/SideMenu.xcodeproj/project.pbxproj index 0289d40..591e846 100644 --- a/SideMenu.xcodeproj/project.pbxproj +++ b/SideMenu.xcodeproj/project.pbxproj @@ -279,7 +279,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0800; - LastUpgradeCheck = 0820; + LastUpgradeCheck = 0830; ORGANIZATIONNAME = jonkykong; TargetAttributes = { 7B48A0D21DCB2487002990A1 = { diff --git a/SideMenu.xcodeproj/xcshareddata/xcschemes/SideMenu.xcscheme b/SideMenu.xcodeproj/xcshareddata/xcschemes/SideMenu.xcscheme index ddb1da7..68e86a1 100644 --- a/SideMenu.xcodeproj/xcshareddata/xcschemes/SideMenu.xcscheme +++ b/SideMenu.xcodeproj/xcshareddata/xcschemes/SideMenu.xcscheme @@ -1,6 +1,6 @@