Convert Figma logo to code with AI

Yalantis logoSide-Menu.iOS

Animated side menu with customizable UI

2,717
317
2,717
3

Top Related Projects

Simple side/slide menu control for iOS, no code necessary! Lots of customization. Add it to your project in 5 minutes or less.

iOS 7/8 style side menu with parallax effect.

iOS Slide Menu View based on Google+, iQON, Feedly, Ameba iOS app. It is written in pure swift.

A simple side menu for iOS written in Swift.

A side menu controller written in Swift for iOS

Quick Overview

Yalantis/Side-Menu.iOS is an elegant and customizable side menu implementation for iOS applications. It provides a smooth and animated transition for revealing a side menu, offering developers an easy way to implement a popular navigation pattern in their iOS apps.

Pros

  • Highly customizable appearance and behavior
  • Smooth and visually appealing animations
  • Easy integration with existing iOS projects
  • Well-documented and maintained by Yalantis

Cons

  • Limited to iOS platform only
  • May require additional effort to adapt to complex app structures
  • Potential performance impact on older devices due to animations

Code Examples

  1. Setting up the side menu:
let menuLeftNavigationController = UISideMenuNavigationController(rootViewController: YourMenuViewController)
SideMenuManager.default.leftMenuNavigationController = menuLeftNavigationController
  1. Customizing menu appearance:
SideMenuManager.default.leftMenuAnimationFallbackSpeed = 0.5
SideMenuManager.default.leftMenuWidth = 240
SideMenuManager.default.leftMenuPresentationStyle = .menuSlideIn
  1. Presenting the side menu:
present(SideMenuManager.default.leftMenuNavigationController!, animated: true, completion: nil)

Getting Started

  1. Install the library using CocoaPods by adding the following to your Podfile:
pod 'SideMenu'
  1. Import the library in your Swift file:
import SideMenu
  1. Set up the side menu in your view controller:
override func viewDidLoad() {
    super.viewDidLoad()
    
    let menuLeftNavigationController = UISideMenuNavigationController(rootViewController: YourMenuViewController)
    SideMenuManager.default.leftMenuNavigationController = menuLeftNavigationController
    
    // Customize appearance
    SideMenuManager.default.leftMenuWidth = 240
    SideMenuManager.default.leftMenuPresentationStyle = .menuSlideIn
    
    // Enable gestures
    SideMenuManager.default.addPanGestureToPresent(toView: self.navigationController!.navigationBar)
    SideMenuManager.default.addScreenEdgePanGesturesToPresent(toView: self.view)
}
  1. Present the side menu when needed:
present(SideMenuManager.default.leftMenuNavigationController!, animated: true, completion: nil)

Competitor Comparisons

Simple side/slide menu control for iOS, no code necessary! Lots of customization. Add it to your project in 5 minutes or less.

Pros of SideMenu

  • More customizable with extensive configuration options
  • Supports both left and right side menus
  • Actively maintained with regular updates

Cons of SideMenu

  • Less visually appealing out-of-the-box compared to Side-Menu.iOS
  • Steeper learning curve due to more configuration options
  • Larger codebase, potentially increasing app size

Code Comparison

Side-Menu.iOS:

let menuLeftNavigationController = UISideMenuNavigationController(rootViewController: MyMenuTableViewController())
SideMenuManager.default.leftMenuNavigationController = menuLeftNavigationController

SideMenu:

let menu = SideMenuNavigationController(rootViewController: YourViewController)
menu.leftSide = true
SideMenuManager.default.leftMenuNavigationController = menu

Both libraries offer similar basic setup, but SideMenu provides more configuration options:

menu.presentationStyle = .menuSlideIn
menu.menuWidth = 300
menu.presentationStyle.backgroundColor = .black
menu.presentationStyle.presentingEndAlpha = 0.8

Side-Menu.iOS focuses on a specific animation style, while SideMenu allows for various presentation styles and customizations. SideMenu's flexibility comes at the cost of increased complexity, while Side-Menu.iOS offers a simpler, more opinionated approach with a visually striking default animation.

iOS 7/8 style side menu with parallax effect.

Pros of RESideMenu

  • More customizable with various configuration options
  • Supports both left and right side menus
  • Includes built-in gesture recognizers for smoother interactions

Cons of RESideMenu

  • Less visually appealing default animation
  • Slightly more complex implementation
  • May require more setup code for basic functionality

Code Comparison

RESideMenu:

RESideMenu *sideMenu = [[RESideMenu alloc] initWithContentViewController:contentViewController
                                                    leftMenuViewController:leftMenuViewController
                                                   rightMenuViewController:rightMenuViewController];
self.window.rootViewController = sideMenu;

Side-Menu.iOS:

let menuViewController = MenuViewController()
let contentViewController = ContentViewController()
let sideMenuViewController = SideMenuViewController(contentViewController: contentViewController, menuViewController: menuViewController)
window?.rootViewController = sideMenuViewController

Both libraries offer easy-to-use implementations for side menus in iOS applications. RESideMenu provides more flexibility and customization options, while Side-Menu.iOS focuses on a sleek, animated design out of the box. RESideMenu supports both left and right menus, whereas Side-Menu.iOS is primarily designed for left-side menus. The code comparison shows that RESideMenu requires slightly more setup, but offers more configuration options. Side-Menu.iOS has a more concise implementation, making it easier to get started quickly.

iOS Slide Menu View based on Google+, iQON, Feedly, Ameba iOS app. It is written in pure swift.

Pros of SlideMenuControllerSwift

  • More customizable with options for left and right side menus
  • Supports both storyboard and programmatic implementation
  • Actively maintained with recent updates

Cons of SlideMenuControllerSwift

  • Less visually appealing default animation compared to Side-Menu.iOS
  • Slightly more complex setup process
  • Fewer stars and forks on GitHub, potentially indicating less community adoption

Code Comparison

Side-Menu.iOS:

let menuLeftNavigationController = UISideMenuNavigationController(rootViewController: YourViewController)
SideMenuManager.default.leftMenuNavigationController = menuLeftNavigationController

SlideMenuControllerSwift:

let mainViewController = MainViewController()
let leftViewController = LeftViewController()
let slideMenuController = SlideMenuController(mainViewController: mainViewController, leftMenuViewController: leftViewController)

Both libraries offer relatively simple implementation, but SlideMenuControllerSwift provides more flexibility in terms of menu placement and customization. Side-Menu.iOS focuses on a more polished default appearance, while SlideMenuControllerSwift allows for greater control over the menu's behavior and appearance.

The choice between these libraries depends on the specific requirements of your project. If you need a quick, visually appealing solution, Side-Menu.iOS might be preferable. For more complex menu systems with greater customization options, SlideMenuControllerSwift could be the better choice.

A simple side menu for iOS written in Swift.

Pros of ENSwiftSideMenu

  • Written in Swift, providing better performance and type safety
  • Simpler implementation with fewer dependencies
  • Easier to customize and integrate into existing projects

Cons of ENSwiftSideMenu

  • Less visually appealing animations compared to Side-Menu.iOS
  • Fewer built-in customization options
  • Less active maintenance and community support

Code Comparison

ENSwiftSideMenu:

let menuViewController = UIViewController()
let sideMenu = ENSideMenu(sourceView: self.view, menuViewController: menuViewController, menuPosition: .Left)
sideMenu.menuWidth = 180

Side-Menu.iOS:

let menuViewController = YALSideMenuViewController()
self.sideMenuViewController = menuViewController
self.sideMenuViewController.delegate = self
self.sideMenuViewController.menuItemsSide = .Left

Both libraries offer straightforward implementation, but ENSwiftSideMenu's code is slightly more concise. Side-Menu.iOS requires setting up a delegate, which can provide more control but may be unnecessary for simpler use cases.

ENSwiftSideMenu is a good choice for developers who prefer a lightweight, Swift-based solution and are comfortable with customizing the menu appearance themselves. Side-Menu.iOS is better suited for those who want a more polished, out-of-the-box solution with advanced animations and customization options.

A side menu controller written in Swift for iOS

Pros of SideMenuController

  • More customizable and flexible, allowing for various menu styles and animations
  • Supports both left and right side menus simultaneously
  • Actively maintained with recent updates and Swift support

Cons of SideMenuController

  • Less visually striking out-of-the-box compared to Side-Menu.iOS's unique animations
  • Requires more setup and configuration to achieve complex designs
  • Documentation could be more comprehensive for advanced use cases

Code Comparison

Side-Menu.iOS:

let menuLeftNavigationController = UISideMenuNavigationController(rootViewController: YourViewController)
SideMenuManager.default.leftMenuNavigationController = menuLeftNavigationController

SideMenuController:

let sideMenuController = SideMenuController()
sideMenuController.leftViewController = YourLeftMenuViewController()
sideMenuController.centerViewController = YourMainViewController()

Both libraries offer relatively simple setup, but SideMenuController provides more flexibility in configuring the menu structure and behavior. Side-Menu.iOS focuses on a specific animation style, while SideMenuController allows for more diverse implementations.

SideMenuController's approach may be preferable for developers seeking greater control over the menu's appearance and functionality, whereas Side-Menu.iOS might be a better choice for those who want a quick, visually appealing solution with minimal customization.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Side Menu

Platform License

Animated side menu with customizable UI. Made in Yalantis.
Check this project on dribbble.
Check this project on Behance.

Requirements

  • iOS 7+
  • Swift 5
  • Xcode 11

Installation

Using CocoaPods

Simply add the following line to your Podfile:

pod 'YALSideMenu', '~> 2.0.1'

(CocoaPods v1.1 or later is required)

Manual Installation

For application targets that do not support embedded frameworks, such as iOS 7, SideMenu can be integrated by including source files from the SideMenu folder directly, optionally wrapping the top-level types into struct SideMenu to simulate a namespace. Yes, this sucks.

  1. Add SideMenu as a submodule by opening the Terminal, cd-ing into your top-level project directory, and entering the command git submodule add https://github.com/yalantis/Side-Menu.iOS.git
  2. Open the SideMenu folder, and drag SideMenu.xcodeproj into the file navigator of your app project.
  3. In Xcode, navigate to the target configuration window by clicking on the blue project icon, and selecting the application target under the "Targets" heading in the sidebar.
  4. Ensure that the deployment target of SideMenu.framework matches that of the application target.
  5. In the tab bar at the top of that window, open the "Build Phases" panel.
  6. Expand the "Target Dependencies" group, and add SideMenu.framework.
  7. Expand the "Link Binary With Libraries" group, and add SideMenu.framework
  8. Click on the + button at the top left of the panel and select "New Copy Files Phase". Rename this new phase to "Copy Frameworks", set the "Destination" to "Frameworks", and add SideMenu.framework.

Usage

  1. Import SideMenu module

    import SideMenu
    
  2. Adopt the Menu protocol in your menu view controller, e.g.

    class MyFancyMenuViewController: UIViewController, Menu  {
        @IBOutlet var menuItems = [UIView] ()
    }
    
  3. Set preferredContentSize in menu view controller to specify the desired menu width

  4. In content view controller store an animator, that will animate our menu.

    import SideMenu
    class ContentViewController: UIViewController  {
        var menuAnimator : MenuTransitionAnimator!
    }
    
  5. Initialize an animator for presentation with parameters

    menuAnimator = MenuTransitionAnimator(mode: .presentation, shouldPassEventsOutsideMenu: false) { [unowned self] in
        self.dismiss(animated: true, completion: nil)
    }
    

If you want, for example, to dismiss your menu when a tap outside menu takes place, you should pass false to shouldPassEventsOutsideMenu flag and assign a tappedOutsideHandler.In fact, you are free to do whatever you want when a tap outside menu occurs or, if you want to have access to your content view controller, just pass true and assign tappedOutsideHandler to nil.

It's possible to specify menu position starting from version 2.0.2. To position menu on the left side you should pass .left to position in MenuTransitionAnimator init. To position menu on the right side - pass .right accordingly.

  1. Implement class of UIViewControllerTransitioningDelegate that will return our menuAnimator from method animationControllerForPresentedController and assign it to transitioningDelegate of menu view controller(Don't forget to set .Custom modal presentation style). To dismiss menu you should return MenuTransitionAnimator(mode: .Dismissal) from animationControllerForDismissedController method.

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let menu = segue.destination as! MenuViewController
        menu.transitioningDelegate = self
        menu.modalPresentationStyle = .custom
    }
    
    func animationController(forPresented presented: UIViewController, presenting _: UIViewController,
        source _: UIViewController) -> UIViewControllerAnimatedTransitioning? {
            return menuAnimator
    }
    
    func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        return MenuTransitionAnimator(mode: .dismissal)
    }
    

Let us know!

We’d be really happy if you sent us links to your projects where you use our component. Just send an email to github@yalantis.com And do let us know if you have any questions or suggestion regarding the animation.

P.S. We’re going to publish more awesomeness wrapped in code and a tutorial on how to make UI for iOS (Android) better than better. Stay tuned!

License

The MIT License (MIT)

Copyright © 2018 Yalantis

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.