I'm not familiar with the app but from looking at the image i'd say one approach would be to use Interface Builder to lay out 9 custom UIButtons (with your own UIImages in them) in the root view of your Navication Controller and then wire up the IBAction (touch up inside) of each of those to push a new view controller on the stack. Again, I don't use facebook so can't say for sure if that's how it's been wired together.
Start by using interface builder to get everything working. You can get most of the way to it working by just dragging and dropping stuff out of interface builder.
Then later on you can enhance user interface using other drawing techniques.
(NB: This answer was more relevant until the original poster changed their question)
http://github.com/joehewitt/three20/tree/master
Here's the open-source library that Joe Hewitt created in the process of making the iPhone Facebook 3.0 app. This is where I would start.
Joel's pointer to Three20 is the best advice - this is the library that Joe opensourced in the course of creating the Facebook.app.
In terms of how you would generally do it, here's my 2 cents:
You'd have a UIScrollView
(note that there can be multiple pages of buttons), each hosting a YourAppButtonGridView
. Each YourAppButtonGridView
would just have an array of the buttons, and would lay them out in a grid (write this in the layoutSubviews
method). Bonus points for using UITabBarItem
, which have a similar look and feel.
I had to do something similar. I created a custom button class and then did this loop
for (int i=1;i <= [OGViewControllers numberOfControllers];i++) {
aButton = [[OGMoreButtonView alloc] initWithIcon:[OGViewControllers iconForViewControllerWithIndex:i]
andTitle:[OGViewControllers titleForViewControllerWithIndex:i]];
aButton.frame = CGRectMake(((i-1)%4) * 80.0, ((i-1)/4) * 65.0, 80.0, 65.0);
aButton.tag = i;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(itemSelected:) name:@"AMoreButtonWasTouched" object:aButton];
[self.view addSubview:aButton];
[aButton release];
}
If you want the scroll affect with the page indicator throw it all in a scroll view that is 640 wide and turn paging on for the scroll view and set the delegate to self then do something like this
-(void)scrollViewDidScroll:(UIScrollView *)scrollView { int oldPage = [pageControl currentPage];
[pageControl setCurrentPage:(int)(([scrollView contentOffset].x/320)+0.5)];
if (oldPage != [pageControl currentPage]) [[NSNotificationCenter defaultCenter] postNotificationName:@"OGSwipeViewItemChanged" object:nil];
}