导航控制器之间的自定义转换

Posted

技术标签:

【中文标题】导航控制器之间的自定义转换【英文标题】:Custom Transition Between Navigation Controllers 【发布时间】:2011-03-12 23:23:13 【问题描述】:

我想在两个导航控制器之间进行自定义转换。我们称第一个为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】:

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

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

我必须使用缓存:否,否则过渡不顺畅。

【讨论】:

以上是关于导航控制器之间的自定义转换的主要内容,如果未能解决你的问题,请参考以下文章

导航控制器中的两个不同的自定义转换

Swift:嵌入在导航控制器中的视图之间的自定义segue

更改导航控制器 ios 的转换

如何让自定义导航控制器为每个故事板提供相同的自定义导航栏按钮

故事板中的自定义导航控制器

导航栏控制器中的自定义后退按钮