导航控制器之间的自定义过渡

时间:2011-03-12 23:23:14

标签: iphone cocoa cocoa-touch ios core-animation

我希望在两个导航控制器之间进行自定义转换。我们先拨打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 个答案:

答案 0 :(得分:1)

我终于找到了解决方案,这里是更新后的代码:

- (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];
}

我不得不使用缓存:否,否则转换不顺畅。