Пользовательский переход между контроллерами навигации - PullRequest
1 голос
/ 13 марта 2011

Я хочу иметь пользовательский переход между двумя контроллерами навигации.Давайте назовем первый sourceController, а другой detailNavController.

Вот мой код:

NewEntryViewController *viewController = [[NewEntryViewController alloc] 
                                                                  initWithStyle:UITableViewStyleGrouped];
viewController.parentController = self;

UINavigationController *detailNavController = [[UINavigationController alloc]
                                                                  initWithRootViewController:viewController];

[UIView beginAnimations:nil context:NULL];
[self.navigationController presentModalViewController:detailNavController animated:NO];

[UIView setAnimationDuration:0.4];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:sourceController.view cache:YES];

[UIView commitAnimations];

SourceController был впервые представлен модально, поэтому я представляю detailNavController модально.Проблема с этим кодом в том, что анимация происходит, но sourceController все еще находится на вершине нового detailNavController.Чего я хотел бы добиться, так это создать анимацию, а затем выбросить sourceController и отобразить detailNavController.

1 Ответ

1 голос
/ 13 марта 2011

Я наконец нашел решение для этого, вот обновленный код:

- (void)createNewEntryWithAnimation
{
    // before calling this method I dismissed sourceController without animation
    NewEntryViewController *viewController = [[NewEntryViewController alloc] initWithStyle:UITableViewStyleGrouped];
    viewController.parentController = self;

    UINavigationController *detailNavController = [[UINavigationController alloc] 
                                                   initWithRootViewController:viewController];

    [UIView beginAnimations:nil context:NULL];
    [self.navigationController presentModalViewController:detailNavController animated:NO];

    [UIView setAnimationDuration:0.4];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:viewController.view.window cache:NO];

    [UIView commitAnimations];
}

Мне пришлось использовать кеш: НЕТ, в противном случае переход не был гладким.

...