UINavigationController:在相反的方向上弹出视图控制器

6
我想调用[[self navigationController] popViewControllerAnimated:YES]函数,但希望动画效果从右到左滑动而不是从左到右。有什么简单的方法可以实现吗?我想返回到上一个视图。感谢任何帮助。谢谢!
3个回答

18

这是如何以相反的方向弹出视图控制器。对我来说,它的工作效果达到了100%

CATransition *transition = [CATransition animation];
    transition.duration = 0.45;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault];
    transition.type = kCATransitionFromRight;
    [transition setType:kCATransitionPush];
    transition.subtype = kCATransitionFromRight;
    [self.navigationController.view.layer addAnimation:transition forKey:nil];
    [self.navigationController popViewControllerAnimated:NO];

这正是我在寻找的!!谢谢。 - Chirag Lukhi
3
您设置了两次类型?transition.type = kCATransitionPush就足够了。 - Markus Rautopuro

10

有可能,看一下我之前用过的以下代码,并尝试让它适用于你自己的情况。你只需要更改setAnimationTransition即可。

[UIView  beginAnimations:nil context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.75];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.navigationController.view cache:NO];
[UIView commitAnimations];

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDelay:0.375];
[self.navigationController popViewControllerAnimated:NO];
[UIView commitAnimations];

有几种不同类型的默认动画可供使用,苹果网站上说这种动画是可能的:

typedef enum {
   UIViewAnimationTransitionNone,
   UIViewAnimationTransitionFlipFromLeft,
   UIViewAnimationTransitionFlipFromRight,
   UIViewAnimationTransitionCurlUp,
   UIViewAnimationTransitionCurlDown,
} UIViewAnimationTransition;

所以在你的情况下,你需要使用以下方法:

    [UIView  beginAnimations:nil context:nil];
    [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDuration:0.75];
    [self.navigationController popViewControllerAnimated:NO];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.navigationController.view cache:NO];
    [UIView commitAnimations];

谢谢。有没有一种方法可以像调用“pushViewController”一样滑动它? - Mason
我理解这个问题,但是我找不到正确的转换方法。 - Mason
只是这些都不能做我想要的事情。我希望它能像UINavigationController推送新视图控制器一样具有完全相同的动作。 - Mason
没问题,我会编辑我的帖子来进行动画设计,这样就能完全符合你的要求。 - Wesley
没有。不过没关系,我最终采用了不同的用户界面策略。感谢你的帮助!我会接受你的答案,这样你就可以得到积分了。 - Mason
显示剩余3条评论

0

Swift版本:

    let animation = CATransition()
    animation.duration = 0.3
    animation.type = .push
    animation.subtype = .fromRight
    animation.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)
    navigationController?.view.layer.add(animation, forKey: nil)
    navigationController?.popViewController(animated: false)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接