7

是的,我已经在寻找答案了。除了不提供淡入淡出转换选项,仅翻转或卷曲的解决方案外,没有任何解决方案有效。

像这样:

methodname
    configure animation
    [self.navigationController popViewControllerAnimated:NO];

无论我尝试何种过渡动画配置,都与仅使用典型的单行弹出没有明显不同。如果我将其更改为…Animated:YES];,我会得到标准的弹出动画,可能是由于损坏的配置发生了一些奇怪的事情。

pop所以我的问题是:如果不是,我怎么能做一个CrossDissolve,那么至少看起来一样的东西?这甚至可以通过导航控制器实现吗?

使用模态视图会有我想要的默认动画,我可以很容易地管理视图堆栈,但我不想这样做。

4

3 回答 3

23

对于这种类型的过渡,我真的会推荐一个模态视图控制器,这就是系统的设计方式。

但是如果你坚持使用导航控制器,有一种方法,虽然有点难看。

[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];

CATransition *transition = [CATransition animation];
[transition setType:kCATransitionFade];
[self.navigationController.view.layer addAnimation:transition forKey:@"someAnimation"];

[self.navigationController popViewControllerAnimated:YES];
[CATransaction commit];

CATransaction将禁用所有标准动画。当CATransition视图被交换时,向导航控制器层添加一个淡入淡出过渡(在这种情况下删除弹出的视图控制器视图)。

于 2012-05-11T14:38:31.317 回答
2

在上面的 iOS 7 中,您可能想要查看UIViewControllerAnimatedTransitioning呈现的视图控制器或UINavigationControllerDelegate方法:

- (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC

我有一些来自另一个问题的示例代码以获取更多信息。

于 2014-07-29T22:56:32.710 回答
0

Joris Kluivers 在 Swift 3 中的回答:

CATransaction.begin()
CATransaction.setDisableActions(true)

let animation = CATransition()
animation.type = kCATransitionFade
self.navigationController?.view.layer.add(animation, forKey: "someAnimation")
_ = self.navigationController?.popViewController(animated: false)

CATransaction.commit()
于 2017-01-24T14:12:14.337 回答