将 Push ViewController 动画更改为看起来像“pop”动画,从左到右进入

Posted

技术标签:

【中文标题】将 Push ViewController 动画更改为看起来像“pop”动画,从左到右进入【英文标题】:Changing Push ViewController animation to look like a "pop" animation, come in from left to right 【发布时间】:2013-08-17 18:54:50 【问题描述】:

现在我正在使用故事板中的 segue 来推送视图控制器,并且只有一次推送转换。如何模仿代码中的“Pop”过渡?我现在可以在使用故事板进行其他过渡的同时执行此操作吗?

更新

我尝试了此处第一条评论中的建议,并进行了一些更改。这是我所拥有的:

UIViewController *dst = [self destinationViewController];
UIViewController *src = [self sourceViewController];
[dst viewWillAppear:YES];
[dst viewDidAppear:NO];

CGRect screenBounds = [[UIScreen mainScreen] bounds];
CGRect f = CGRectMake(-screenBounds.size.width, 0, screenBounds.size.width, screenBounds.size.height);
dst.view.frame = f;
f.origin.x = screenBounds.size.width;
src.view.frame = f;

[UIView transitionFromView:src.view
                    toView:dst.view
                  duration:0.3
                   options:UIViewAnimationOptionTransitionNone
                completion:^(BOOL finished)
     [dst viewDidAppear:YES];

     UINavigationController *nav = src.navigationController;
     [nav popViewControllerAnimated:NO];
     [nav pushViewController:dst animated:NO];
 ];

这几乎是我想要的,但原来的视图控制器只是消失了,而不是向右滑动。

【问题讨论】:

你必须使用自定义动画,weeny.tk/rF2xe9C 【参考方案1】:

您可以在您的 stroyboard 上创建 Segue 类型“Custom”并创建一个名为“popSegue”的新 UIStoryboardSegue 类在 popSegue.m 文件中添加:

    -(void)perform
UIViewController *sourceViewContreoller = [self sourceViewController];

CATransition *animation = [CATransition animation];
[animation setType:kCATransitionFromLeft]; //or kCATransitionFromRight 
[animation setDuration:0.25];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:
                              kCAMediaTimingFunctionEaseIn]];

[sourceViewContreoller.navigationController.view.layer addAnimation:animation forKey:@"animateOpacity"]; //or key=@"fadeTransition"

[sourceViewContreoller.navigationController popViewControllerAnimated:YES];

[CATransaction commit];

在故事板编辑器中选择 segue 并将 Segue 类更改为“popSegue”。 将标识符设置为“popSegue”。 试试这个并评论你的结果

【讨论】:

我实际上是想推送一个视图,但要使用弹出的过渡。所以推送的视图将来自从左到右。抱歉,在描述中,我的意思是从左到右,只是做了更改。 这只是弹出导航控制器。我想推送一个视图控制器,但让过渡看起来像是在弹出。

以上是关于将 Push ViewController 动画更改为看起来像“pop”动画,从左到右进入的主要内容,如果未能解决你的问题,请参考以下文章

ViewController 方向变化没有动画

TransformAnimation - 一个超简单的导航转换动画

TransformAnimation - 一个超简单的导航转换动画

NavigationController 推送扭曲背景图像

与 Push 交互后导航到特定 ViewController

将 navigationController 上的 viewController 推送到动画底部到顶部 iPhone SDK