AKSideMenu

AKSideMenu is a double side menu library with Parallax effect.

AKSideMenu

Example Project

See the contained examples to get a sample of how AKSideMenu can easily be integrated in your project.

Build the examples from the AKSideMenuExamples directory.

Installation

CocoaPods.

To install, add the following line to your Podfile:

pod 'AKSideMenu'
Ruby

Carthage.

To install, add the following line to your Cartfile:

github "dogo/AKSideMenu" "1.4.5"
Ruby

Easy to use

Simple implementation

In your AppDelegate, add the code below.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    self.window = UIWindow.init(frame: UIScreen.main.bounds)

    // Create content and menu controllers
    let navigationController: UINavigationController = UINavigationController.init(rootViewController: FirstViewController.init())
    let leftMenuViewController: LeftMenuViewController = LeftMenuViewController.init()
    let rightMenuViewController: RightMenuViewController = RightMenuViewController.init()

    // Create side menu controller
    let sideMenuViewController: AKSideMenu = AKSideMenu(contentViewController: navigationController, leftMenuViewController: leftMenuViewController, rightMenuViewController: rightMenuViewController)

    // Make it a root controller
    self.window!.rootViewController = sideMenuViewController

    self.window!.backgroundColor = UIColor.white
    self.window?.makeKeyAndVisible()
    return true
}        
Swift

Storyboards Example

  1. Create a subclass of AKSideMenu. In this example we call it RootViewController.
  2. In the Storyboard designate the root view's owner as RootViewController.
  3. Add more view controllers to your Storyboard, and give them identifiers "leftMenuViewController", "rightMenuViewController" and "contentViewController". Note that in the new XCode the identifier is called "Storyboard ID" and can be found in the Identity inspector.
  4. Add a method awakeFromNib to RootViewController.swift with the following code:
override public func awakeFromNib() {    
    self.contentViewController = self.storyboard!.instantiateViewControllerWithIdentifier("contentViewController")
    self.leftMenuViewController = self.storyboard!.instantiateViewControllerWithIdentifier("leftMenuViewController")
    self.rightMenuViewController = self.storyboard!.instantiateViewControllerWithIdentifier("rightMenuViewController")
}
Swift

Here is an example of a delegate implementation. Please adapt the code to your context.

...
sideMenuViewController.delegate = self
...

// MARK: - <AKSideMenuDelegate>

open func sideMenu(_ sideMenu: AKSideMenu, shouldRecognizeGesture recognizer: UIGestureRecognizer, simultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    // return true to allow both gesture recognizers to recognize simultaneously. Returns false by default
    return false
}

open func sideMenu(_ sideMenu: AKSideMenu, gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOf otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    // return true or false based on your failure requirements. Returns false by default
    return false
}

open func sideMenu(_ sideMenu: AKSideMenu, gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    // return true or false based on your failure requirements. Returns false by default
    return false
}

open func sideMenu(_ sideMenu: AKSideMenu, willShowMenuViewController menuViewController: UIViewController) {
    print("willShowMenuViewController")
}

open func sideMenu(_ sideMenu: AKSideMenu, didShowMenuViewController menuViewController: UIViewController) {
    print("didShowMenuViewController")
}

open func sideMenu(_ sideMenu: AKSideMenu, willHideMenuViewController menuViewController: UIViewController) {
    print("willHideMenuViewController")
}

open func sideMenu(_ sideMenu: AKSideMenu, didHideMenuViewController menuViewController: UIViewController) {
    print("didHideMenuViewController")
}
Swift

Present the menu view controller:

self.sideMenuViewController!.presentLeftMenuViewController()
Swift

or

self.sideMenuViewController!.presentRightMenuViewController()
Swift

Switch content view controllers:

self.sideMenuViewController!.setContentViewController(viewController, animated: true)
self.sideMenuViewController!.hideMenuViewController()
Swift

Properties

public var animationDuration: TimeInterval
Swift

The animation duration. Defaults to 0.35.

public var backgroundImage: UIImage
Swift

The content background image. Defaults to white.

public var panGestureEnabled: Bool
Swift

Enables panGesture detection. Defaults to True.

public var panFromEdge: Bool
Swift

Enables panGesture detection from the edge. Defaults to True.

public var panMinimumOpenThreshold: Float
Swift

The minimum pan gesture amount to open the side menu. Defaults to 60.0.

public var interactivePopGestureRecognizerEnabled: Bool
Swift

Enables interactive pop gesture recognizer. Defaults to True.

public var scaleContentView: Bool
Swift

TODO. Defaults to True.

public var scaleBackgroundImageView: Bool
Swift

TODO. Defaults to False.

public var scaleMenuView: Bool
Swift

TODO. Defaults to True.

public let contentViewShadowEnabled: Bool
Swift

TODO. Defaults to False.

public var contentViewShadowOffset: CGSize
Swift

TODO. Defaults to CGSizeZero.

public var contentViewShadowOpacity: Float
Swift

TODO. Defaults to 0.4.

public var contentViewShadowRadius: CGFloat
Swift

TODO. Defaults to 8.0.

public var contentViewScaleValue: CGFloat
Swift

TODO. Defaults to 0.7.

public var contentViewInLandscapeOffsetCenterX: CGFloat
Swift

TODO. Defaults to 30.0.

public var contentViewInPortraitOffsetCenterX: CGFloat
Swift

TODO. Defaults to 30.0.

public var parallaxMenuMinimumRelativeValue: CGFloat
Swift

TODO. Defaults to -15.

public var parallaxMenuMaximumRelativeValue: CGFloat
Swift

TODO. Defaults to 15.

public var parallaxContentMinimumRelativeValue: CGFloat
Swift

TODO. Defaults to -25.

public var parallaxContentMaximumRelativeValue: CGFloat
Swift

TODO. Defaults to 25.

public var menuViewControllerTransformation: CGAffineTransform
Swift

TODO. Defaults to nil.

public var parallaxEnabled: Bool
Swift

TODO. Defaults to True.

public var bouncesHorizontally: Bool
Swift

TODO. Defaults to True.

public var menuPreferredStatusBarStyle: UIStatusBarStyle
Swift

Preferred UIStatusBarStyle when the menu is visible. Defaults to UIStatusBarStyle.default.

public var menuPrefersStatusBarHidden: Bool
Swift

Sets StatusBar hidden or not when the menu is visible. Defaults to False.

public var backgroundTransformScale: CGFloat
Swift

Sets the transform scale amount applied to the background imageview. Defaults to 1.7.

public var panFromEdgeZoneWidth: CGFloat
Swift

Sets the width of the pan gesture zone should be recognized. Defaults to 20.0.

public var panGestureLeftEnabled: Bool
Swift

Enable or disable left pan gesture recognition. Defaults to True.

public var panGestureRightEnabled: Bool
Swift

Enable or disable right pan gesture recognition. Defaults to True.

Collaboration

I tried to build an easy way to use API, while being flexible enough for multiple variations, but I'm sure there are ways of improving and adding more features, so feel free to collaborate with ideas, issues and/or pull requests.

ARC

AKSideMenu needs ARC.

GitHub

Beautiful iOS side menu library with parallax effect. Written in SwiftRead More

Latest commit to the develop branch on 10-28-2024
Download as zip