Один отличный способ сделать это — использовать способность 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 под названием «Реализация UIViewController Containment».
person
Mr. T
schedule
15.12.2012
UINavigationController
. Я также просто хотел бы понять, как это сделать без него. - person GarlicFries   schedule 25.07.2011