Один отличный способ сделать это - использовать UIViewController из iOS5 +, чтобы иметь дочерние UIViewControllers (это называется сдерживанием контроллера представления).Мне, конечно, было трудно понять, как это сделать, пока я не посмотрел видео WWDC, которое объясняет это в деталях.
В двух словах, он позволяет вам создать свой собственный родительский контроллер представления, которому принадлежит серия дочерних контроллеров представления.Этот единственный родительский контроллер представления может (и, вероятно, должен, если вы не делаете действительно причудливых вещей: P), сидеть в качестве корневого контроллера представления вашего приложения.Этот метод наличия одного контроллера представления действует как родительский (и облегчает добавление, удаление и переход дочерних контроллеров представления) напоминает о том, что делает UINavigationController (что является намерением Apple).Теперь вы можете создать свой собственный UINavigationController-подобный родительский контроллер представления, но иметь совершенно разные анимации перехода и пользовательский интерфейс.
В качестве примера, в родительском контроллере представления, в viewDidLoad я добавляю первый дочерний контроллер, подобный этому:
self.currentlyDisplayedChildViewController = [[TheFirstViewController alloc] init];
[self addChildViewController:self.currentlyDisplayedChildViewController];
[self.view addSubview:self.currentlyDisplayedChildViewController.view];
[self.currentlyDisplayedChildViewController didMoveToParentViewController:self];
Тогда у меня будет функция для перехода к следующему дочернему контроллеру представления (ПРИМЕЧАНИЕ: эта функция принадлежит родительскому контроллеру представления - контроллер представления, который будет действовать какваш UINavigationController) :
- (void)transitionToViewController:(UIViewController *)nextChildViewController
{
[self addChildViewController:nextChildViewController];
__weak TheParentViewController *me = self;
[self transitionFromViewController:self.currentlyDisplayedChildViewController
toViewController:nextChildViewController
duration:1.0f
options:UIViewAnimationOptionTransitionFlipFromLeft
animations:nil
completion:^(BOOL finished)
{
[nextChildViewController didMoveToParentViewController:self];
[me.currentlyDisplayedChildViewController willMoveToParentViewController:nil];
[me.currentlyDisplayedChildViewController removeFromParentViewController];
me.currentlyDisplayedChildViewController = nextChildViewController;
}];
}
Одна вещь, которая действительно хороша, это то, что вы можете использовать все стандартные параметры UIViewAnimationTransition (или определить свою собственную пользовательскую анимацию в блоке анимаций. Кроме того, любые события вращения ориентации автоматически перенаправляютсяот родительского контроллера представления к дочерним контроллерам представления. Это была одна из самых трудных проблем с выполнением собственных манипуляций с контроллером корневого представления.
Я бы посоветовал взглянуть на видео WWDC2011 под названием "Implementin".g UIViewController Containment ".