контроллеры представления структуры куба - PullRequest
0 голосов
/ 22 марта 2012

Я хочу создать приложение, которое имеет 6 контроллеров представления, расположенных в структуре куба (вместо панели вкладок для навигации ...). Я использовал этот пример для создания переходов куба: переключение двух видов представления контроллера в анимации куба

Однако большинство примеров (еще один: как работает CATransition? ) показывают, как переходить между UIViews, а не UIViewControllers, что меня интересует.

Мои вопросы: как я могу использовать CATransition для перехода между UIViewController, а также - как мне вернуться от одного UIViewController к другому, если я использую метод pushViewController: (до сих пор я использовал presentModalViewController: и получаю назад (скажем, для отмены) использовал этот метод dismissModalViewControllerAnimated:).

Спасибо.

1 Ответ

4 голосов
/ 22 марта 2012

Вы не можете использовать CATransition для переключения между двумя контроллерами представления, но вы можете просто использовать представление контроллера представления и переключить его с представлением другого контроллера представления.

iOS 5 упростила переход с UIViewControllers, поскольку в нем появился метод transitionFromViewController:toViewController:duration:options:animations:completion:.

В конце концов, вы все равно будете использовать UIViews UIViewControllers.

(На самом деле, указанная вами ссылка - это именно то, как вы переходите между двумя UIViewControllers. Помните, что контроллеры представления управляют только представлениями и не являются самими представлениями. Переключение обратно не так просто, как dismissModalViewControllerAnimated: но иногда настройка не выполняется т легко).

Вот пример использования метода iOS 5:

UIViewController * controller = [[UIViewController alloc] initWithNibName: nil bundle: nil]; [controller.view setBackgroundColor: [UIColor greenColor]];

[self addChildViewController:controller];

[self transitionFromViewController:self.redController toViewController:controller duration:0.8 options:0 animations:^{
    CATransition *transition = [CATransition animation];
    transition.delegate = self;
    transition.duration = 0.8;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    NSString *types[4] = {@"cube", @"rippleEffect", @"cube", @"alignedCube"};
    NSString *subtypes[4] = {kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromRight};

    transition.type = types[0];
    transition.subtype = subtypes[1];

    [self.view.layer addAnimation:transition forKey:nil];
} completion:^(BOOL finished) {
    [controller didMoveToParentViewController:self];
}];

Обратите внимание, вам придется заранее сделать следующее.

[self addChildViewController:self.redController];
[self.view addSubview:self.redController.view];

Есть несколько вещей, которые вы должны сделать перед использованием этих методов. Основное отличие состоит в том, что у вас будет еще один контроллер представления, чем у вас есть. Этот дополнительный UIViewController служит контейнером для двух других (вроде как в настоящее время self.view является контейнером для двух ваших UIViews).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...