Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/handsomecode/InteractiveSideMenu
iOS Interactive Side Menu written in Swift.
https://github.com/handsomecode/InteractiveSideMenu
carthage cocoapods sidebar-menu sidemenu swift
Last synced: about 1 month ago
JSON representation
iOS Interactive Side Menu written in Swift.
- Host: GitHub
- URL: https://github.com/handsomecode/InteractiveSideMenu
- Owner: handsomecode
- License: apache-2.0
- Created: 2017-01-20T10:17:09.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2020-09-27T10:15:23.000Z (over 4 years ago)
- Last Synced: 2024-11-28T12:15:48.176Z (about 1 month ago)
- Topics: carthage, cocoapods, sidebar-menu, sidemenu, swift
- Language: Swift
- Homepage:
- Size: 10.8 MB
- Stars: 708
- Watchers: 34
- Forks: 164
- Open Issues: 38
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
- awesome-ios - InteractiveSideMenu - Customizable iOS Interactive Side Menu written in Swift 3. (UI / Menu)
- awesome-swift - InteractiveSideMenu - Customizable iOS Interactive Side Menu. (Libs / UI)
- awesome-swift - Interactive Side Menu - Customizable iOS Interactive Side Menu written in Swift 3.0. (UI)
- awesome-swift - InteractiveSideMenu - Customizable iOS Interactive Side Menu. (Libs / UI)
- awesome-ios-star - InteractiveSideMenu - Customizable iOS Interactive Side Menu written in Swift 3. (UI / Menu)
- fucking-awesome-swift - InteractiveSideMenu - Customizable iOS Interactive Side Menu. (Libs / UI)
- awesome-swift - InteractiveSideMenu - iOS Interactive Side Menu written in Swift. ` 📝 a year ago` (UI [🔝](#readme))
README
# Interactive Side Menu
A customizable, interactive, auto expanding and collapsing side menu for iOS written in Swift.Here are some of the ways Interactive Side Menu can be customized:
- Animation duration
- Visible content width
- Content scale
- UIView spring animations
- Animation curves
- Customized animation settings for different orientations## Communication
- If you **need help or found a bug**, please, open an issue.
- If you **have a feature request**, open an issue.
- If you **are ready to contribute**, submit a pull request.
- If you **like Interactive Side Menu**, please, give it a star.
- If you **use Interactive Side Menu in your application published to AppStore**, [send us a link](https://github.com/handsomecode/InteractiveSideMenu/issues/new) and we'll create the list with applications used our library.You can find more details into [CONTRIBUTING](./CONTRIBUTING.md) file.
## Installation
### CocoaPods
To install using [CocoaPods](https://cocoapods.org/), add the following line to your Podfile:
```
pod 'InteractiveSideMenu'
```
Please, don't forget to run `pod update` command to update your local specs repository during migration from one version to another.### Carthage
To install using [Carthage](https://github.com/Carthage/Carthage), add the following line to your Cartfile:
```
github "handsomecode/InteractiveSideMenu"
```## Usage
To implement your side menu you should subclasses the following view controllers: `MenuContainerViewController` and `MenuViewController`
- `MenuContainerViewController` is the main container that hosts the side menu and content controller
- `MenuViewController` is the container controller for the side menuTo add a new menu item, your view controller needs to conform to the `SideMenuItemContent` protocol.
Setting up the side menu can be done in three steps:
##### For this, Host = `MenuContainerViewController` subclass and Menu = `MenuViewController` subclass
1. Assign Menu to the `menuViewController` property of Host
2. Set the Host's `contentViewControllers` array with an array of `SideMenuItemContent` controllers
3. Call `selectContentViewController(_ selectedContentVC: MenuItemContentViewController)` from Host```swift
import InteractiveSideMenuclass HostViewController: MenuContainerViewController {
override func viewDidLoad() {
super.viewDidLoad()
menuViewController = self.storyboard!.instantiateViewController(withIdentifier: "NavigationMenu") as! MenuViewController
contentViewControllers = contentControllers()
selectContentViewController(contentViewControllers.first!)
}private func contentControllers() -> [MenuItemContentViewController] {
var contentList = [MenuItemContentViewController]()
contentList.append(self.storyboard?.instantiateViewController(withIdentifier: "First") as! MenuItemContentViewController)
contentList.append(self.storyboard?.instantiateViewController(withIdentifier: "Second") as! MenuItemContentViewController)
return contentList
}
}
```## Items content
To show menu, call `showSideMenu()` from any `SideMenuItemContent` controller.
```swift
import InteractiveSideMenuclass KittyViewController: UIViewController, SideMenuItemContent {
@IBAction func openMenu(_ sender: UIButton) {
showSideMenu()
}
}
```To change the currently visible controller, pass the desired controller to your `MenuContainerViewController`:
```swift
let index = 2 // Second menu item
guard let menuContainerViewController = self.menuContainerViewController else { return }
let contentController = menuContainerViewController.contentViewControllers[index]
menuContainerViewController.selectContentViewController(contentController)
menuContainerViewController.hideSideMenu()
```
### TabBar and Navigation controllersTo use menu with **TabBar** or **NavigationController**, ensure that you indicate UITabBarController or UINavigationController as item content directly, not any corresponding ViewControllers.
```swift
class NavigationViewController: UINavigationController, SideMenuItemContent {
}class InnerViewController: UIViewController {
@IBAction func openMenu(_ sender: Any) {
if let navigationViewController = self.navigationController as? SideMenuItemContent {
navigationViewController.showSideMenu()
}
}
}
```
Please, find UITabBarController implementation details in [Sample](./Sample).
## Animation Customization
To customize the open and close animations, update the `transitionOptions` property on your `MenuContainerViewColtroller` subclass. The sample project does this in `viewDidLoad()`
```swift
override func viewDidLoad() {
super.viewDidLoad()
let screenSize: CGRect = UIScreen.main.bounds
self.transitionOptions = TransitionOptions(duration: 0.4, visibleContentWidth: screenSize.width / 6)
...
}
```To customize transition options for different orientations, override `viewWillTransition(to:with:)` and update the `transitionOptions`. This can also be done with trait collections using `traitCollectionDidChange(_:)`
```swift
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
var options = TransitionOptions()
options.duration = size.width < size.height ? 0.4 : 0.6
options.visibleContentWidth = size.width / 6
self.transitionOptions = options
}
```Check out the [Sample](./Sample) project for more details and usage examples.
# Known Issues
There is [an issue](https://github.com/handsomecode/InteractiveSideMenu/issues/53) associated with the content controller's view not properly having the `safeAreaInsets` set. This causes the view's layout to shift when the side menu is closed. The issue appears to be tied to the transition options `contentScale` setting. Choosing a value in the range 0.87 - 0.91 causes the `safeAreaInsets.top` to be set to `0.0`. The default value of the library is no longer within this range but be mindful if changing that value for your own application.# Requirements
- iOS 8.0+
- Xcode 8.1+
- Swift 3.0+# License
InteractiveSideMenu is available under the Apache License, Version 2.0. See the [LICENSE](./LICENSE) file for more info.