After reviewing other stacked implementations, i wrote my own solutions from scratch. This one lets you add plain UIViewControllers to a PSStackedViewRootViewController, working much like a UINavigationController.
All the hard parts, moving, shadows, rounded borders is taken care of.
I made it for the iPad-Version of the popular austrian TV app "3MobileTV". (You need an austrian 3-SIM to test it, but you can check out the screenshots to get the idea what's possible with it).
Currently there is a positioning bug with small view controllers, I'll fix that in the foreseeable future. Otherwise, it's pretty much a drop-in-replacement for UINavigationController, using regular UIViewControllers. It supports iOS4 upwards, with some special support for iOS5's new view controller containment coming.
It works on the iPad and the iPhone, but the concept is better suited for the iPad.
... and custom-skinned, you can build pretty hot interfaces:
Much like UINavigationController, it's a good idea to put your PSStackedViewRootController in the AppDelegate:
@property (nonatomic, retain) PSStackedViewRootController *stackController;
Create the stack in application:didFinishLaunchingWithOptions:
ExampleMenuRootController *menuController = [[[ExampleMenuRootController alloc] init] autorelease]; self.stackController = [[[PSStackedViewRootController alloc] initWithRootViewController:menuController] autorelease]; [self.stackController pushViewController:demoViewController fromViewController:nil animated:NO]; window.rootViewController = self.stackController;
PSStackedViewRootController's rootViewController is in the background and its left part is always visible. Adjust the size with leftInset and largeLeftInset.
- Add (conditional) support for the new child view controller system in iOS5
- lots more
Licensed under MIT. Use it for whatever you want, in commercial apps or open source. I just wand a little contribution somewhere in your about box.
There are some open source and commerical stacked implementations out there, yet none of them were flexible enough to fit my needs. Special thanks to Cocoacontrols for this article.