Skip to content

MarcoSero/MSMatrixController

Repository files navigation

MSMatrixController

A component to organize your view controllers in a gesture-based 2D matrix.

image

Get it ready

The best way to install it inside your project is with CocoaPods: simply add

pod 'MSMatrixController'

inside your Podfile.
If for some mysterious reason you are not using CocoaPods, copy the folder MSMatrixController inside your Xcode project.

Then, import MSMatrixController.h inside your prefix or application delegate.

How it works

Organize your view controllers inside a Matrix, specifying for each of them its row and column. Then add them inside an instance of MSMatrixController.

image

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  UIStoryboard *currentStoryboard = [UIStoryboard storyboardWithName:@"iPhone" bundle:nil];

  UIViewController *initialViewController = self.window.rootViewController;
  MSMatrixMasterViewController *matrixMasterViewController = [[MSMatrixMasterViewController alloc] initWithFrame:initialViewController.view.frame];

  UIViewController *position00ViewController = [currentStoryboard instantiateViewControllerWithIdentifier:@"position00"];
  position00ViewController.row = 0;
  position00ViewController.col = 0;

  UIViewController *position01ViewController = [currentStoryboard instantiateViewControllerWithIdentifier:@"position01"];
  position01ViewController.row = 0;
  position01ViewController.col = 1;
  
  UIViewController *position11ViewController = . . . . 

  NSArray *controllers = @[position00ViewController, position01ViewController, position11ViewController, position12ViewController,
position21ViewController, position22ViewController, position23ViewController, position24ViewController, position14ViewController];

  [matrixMasterViewController setControllers:controllers];

  self.window.rootViewController = matrixMasterViewController;
  [self.window makeKeyAndVisible];
  return YES;
}

Features

For each controller, you can access its neighborhood:

controller.leftViewController
controller.rightViewController
controller.topViewController
controller.bottomViewController

and the matrix master controller:

controller.matrixViewController

The default way to navigate the matrix of controllers is with swipe gestures, but you can move through them programmatically as well.

- (void)moveLeftAnimated:(BOOL)animated;
- (void)moveRightAnimated:(BOOL)animated;
- (void)moveUpAnimated:(BOOL)animated;
- (void)moveDownAnimated:(BOOL)animated;
- (void)moveLeftAnimated:(BOOL)animated withCompletion:(void (^)(void))completion;
- (void)moveRightAnimated:(BOOL)animated withCompletion:(void (^)(void))completion;
- (void)moveUpAnimated:(BOOL)animated withCompletion:(void (^)(void))completion;
- (void)moveDownAnimated:(BOOL)animated withCompletion:(void (^)(void))completion;

Callbacks and MSMatrixControllerDelegate

At this moment, MSMatrixController does use the default UIKit callbacks when a view appears/disappears:

- (void)viewDidAppear:(BOOL)animated;    
- (void)viewDidDisappear:(BOOL)animated;

Also, it declares the delegate MSMatrixControllerDelegate:

- (void)willMoveToViewController:(UIViewController *)viewController atPosition:(Position)position;
- (void)didMoveToViewController:(UIViewController *)viewController atPosition:(Position)position;

Credits

Freely inspired by Circle and MBSpacialViewController

Contact

Marco Sero

License

MSMatrixController is available under the MIT license. See the LICENSE file for more info.

About

A component to organize your view controllers in a gesture-based 2D matrix.

Resources

License

Stars

Watchers

Forks

Packages

No packages published