A: 

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.

Meltemi
A: 

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)

corydoras
This adds no real value to the question.
AlBlue
+1  A: 

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 Hooks
+1  A: 

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.

Itay
+1  A: 
PyjamaSam
chris, would you be able to share code that does the physical layout of your buttons in a grid fashion? That would help the most.
Coocoo4Cocoa
The jist of it is:http://pastie.org/private/7gw4i2onu3jh3rdxzs9phqThough there is more to it (I just quickly cut and paste this code out and tryed to simplify it as much as possible - but you get the idea.)chris.
PyjamaSam
A: 

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];

}

Ron Miller