I have hooks in my App Delegate to help with this. This is how I do it in my code (note that each tab has a UINavigationController inside it):
SLAppDelegate *delegate = (SLAppDelegate *)[[UIApplication sharedApplication] delegate];
UIView * fromView = delegate.tabController.selectedViewController.view;
UIView * toView = [[delegate.tabController.viewControllers objectAtIndex:3] view];
[UIView transitionFromView:fromView
toView:toView
duration:0.5
options: UIViewAnimationOptionTransitionFlipFromRight
completion:^(BOOL finished) {
if (finished) {
delegate.tabController.selectedIndex = 3;
MapViewController *map = (MapViewController *)[delegate.navMapsController.viewControllers objectAtIndex:0]; // map view is the only VC in the navController
// do something with the map view
}
}];