ALButtomMenu is a fast, customizable, fully documented menu solution for iOS.
Installation is easy.
pod 'ALButtonMenu'
in your Podfile#import <ALButtonMenu/ALButtonMenu.h>
in your view of choice
- Download the .zip from Github and copy
ALButtonMenu/Source
directory to your project #import "ALButtonMenu.h"
in your view of choice
Refer to the demo project for an interactive example, or just take a look at the code and comments below.
//
// MyRootViewController.m
//
// this, or whatever init method you choose to use
- (instancetype)init
{
if ((self = [super init]) == NO)
{
return nil;
}
// the layout that we'll use for the menu view controller
ALMenuViewControllerLayout layout;
// the menu items will be displayed in a grid with this many columns. however, in landscape mode,
// this value will be used for the number of rows instead.
//
layout.columns = 2;
// the spacing between menu items
layout.itemSpacing = 15.f;
// the size of the menu items
layout.itemSize = CGSizeMake(100.f, 100.f);
// can be an array of any number of items that inherit from ALButton or conform to the <ALMenuItem> protocol
NSArray<UIView<ALMenuItem> *> *items = [self allMenuItems];
// create the view model for the menu view controller
ALMenuViewControllerViewModel *menuViewModel = [[ALMenuViewControllerViewModel alloc] initWithItems:items layout:layout];
// tweak the default values. see ALMenuViewControllerViewModel.h for configurable properties
menuViewModel.appearingAnimation = ALMenuViewControllerAppearingAnimationOrigin;
// the menu view controller can be an instance of ALMenuViewController, or any class that conforms
// to the <ALMenuViewController> protocol
//
ALMenuViewController *menuViewController = [[ALMenuViewController alloc] initWithViewModel:menuViewModel];
// an instance of your view controller class
MyViewController *viewController = [[MyViewController alloc] init];
// create the view model for the navigation coordinator
ALNavigationCoordinatorViewModel *navViewModel = [[ALNavigationCoordinatorViewModel alloc] init];
// tweak the default values. see ALNavigationCoordinatorViewModel.h for configurable properties.
navViewModel.buttonCanBeRepositioned = YES;
// create the navigation coordinator with the menu view controller and your app's root view controller. the
// root view controller can be an instance of UIViewController or UINavigationController
//
_navigationCoordinator = [[ALNavigationCoordinator alloc] initWithViewModel:navViewModel menuViewController:menuViewController rootViewController:rootViewController];
// and be sure to assign yourself as the delegate. if you configure the navigation coordinator with a navigation
// controller (instead of a root view controller), the coordinator will need to assign itself as that navigation
// controller's delegate, so you can optionally receive those delegate callbacks via this assignment. just
// implement the methods.
//
_navigationCoordinator.delegate = self;
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// the navigation coordinator creates a navigation controller configured with the provided
// menu view controller and root view controller. we need to add that navigation controller
// to the view heirarchy
//
UIViewController *childViewController = self.navigationCoordinator.navigationController;
// then add it as a child view controller
[self addChildViewController:childViewController];
[self.view addSubview:childViewController.view];
[childViewController didMoveToParentViewController:self];
// then notify the navigation coordinator about our viewDidLoad event
[self.navigationCoordinator viewDidLoad];
}
#pragma mark - ALNavigationCoordinatorDelegate
// be sure to implement the navigation coordinator's delegate method. it will fire when an item in the menu view controller is
// tapped. return your specific UIViewController instance for that index.
//
- (UIViewController *)navigationCoordinator:(ALNavigationCoordinator *)navigationCoordinator viewControllerForMenuItemAtIndex:(NSUInteger)index
{
return [[MyViewController alloc] init];
}
#pragma mark - Status bar
// optionally, return the menu view controller in this method to hide the status bar when the menu is shown.
- (UIViewController *)childViewControllerForStatusBarHidden
{
return self.navigationCoordinator.menuViewController;
}
#pragma mark - Rotation
// be sure to alert the navigation coordinator about size change events.
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
[self.navigationCoordinator viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}
You can reach me anytime at the addresses below. If you use ALButtonMenu, feel free to give me a shoutout on Twitter to let me know how you like it. I'd love to hear your thoughts!
Github: lobianco
Email: anthony@lobian.co
ALButtonMenu is developed and maintained by Anthony Lobianco. Licensed under the MIT License. Basically, I would appreciate attribution if you use it.
Enjoy!