2010-06-30 127 views
4

当向下钻取时,CATransitions可用于在导航控制器中为转换创建动画。但是,当使用后退按钮或导航控制器(返回时)动画仍然滑出。有谁知道如何将CATransition附加到导航控制器的后退按钮?谢谢。导航控制器中的后退按钮动画

代码中使用时“向下钻取”动画:

CATransition *transition = [CATransition animation]; 
transition.duration = 1; 
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
transition.type = kCATransitionPush; 
transition.subtype = kCATransitionFromTop; 
transition.delegate = self; 
[self.navigationController.view.layer addAnimation:transition forKey:nil]; 
+0

您可以参考以下链接https://stackoverflow.com/a/45343228/5437576 – 2017-07-27 06:48:44

回答

0

我不知道我理解的问题。 UINavigationController在切换视图时已经使用幻灯片切换。如果你想附加一个自定义转换到后退按钮,你将不得不创建一个自定义后退按钮,并将其连接到一个动作,该动作将运行你的CATransition代码。

+0

这就是事情。 UINavigationController使用幻灯片切换,我需要它翻转。 – vilo 2010-07-07 08:28:06

6

要将动画添加到后退按钮,您必须创建自己的后退按钮,并在后退按钮动作中指定所需的动画。

  1. 添加一个返回按钮,导航栏:这一行添加到您的viewDidLoad方法:

    self.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemReply target:self action:@selector(back)]; 
    
  2. 在后面方法添加以下代码:

    CATransition *transition = [CATransition animation]; 
    transition.duration = 1; 
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    transition.type = kCATransitionPush; 
    transition.subtype = kCATransitionFromBottom; 
    transition.delegate = self; 
    [self.navigationController.view.layer addAnimation:transition forKey:nil]; 
    [self.navigationController popViewControllerAnimated:YES]; 
    
+0

shadowfax发布的答案并未完全删除呈现视图控制器完成的幻灯片动画。使用这个答案(自定义后退按钮)最适合替换动画,但我现在必须提供自定义后退按钮图像。 – 2014-11-26 19:51:44

7

没有必要创建一个自定义按钮...你可以简单地做这样的事情:

- (void)viewWillDisappear:(BOOL)animated 
{ 
    if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) { 
     // back button was pressed. We know this is true because self is no longer 
     // in the navigation stack. 
     CATransition *transition = [CATransition animation]; 
     [transition setDuration:0.75]; 
     [transition setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 
     [transition setType:@"oglFlip"]; 
     [transition setSubtype:kCATransitionFromLeft]; 
     [transition setDelegate:self]; 
     [self.navigationController.view.layer addAnimation:transition forKey:nil]; 
    } 

    [super viewWillDisappear:animated]; 
} 

编辑:你必须先添加石英框架,以便如果你想要一个像导航控制器栏的后退按钮动画只要把下面在动作代码中使用CATransition

+0

我刚刚试过这个,并开箱即用(不错的动画和所有:-) 这是否会通过苹果的审查? 为什么这会覆盖自定义导航的动画? (我的意思是,我很高兴它,但基于代码不会这么说) – alasker 2014-09-12 13:41:34

0

[self.navigationController popViewControllerAnimated:YES];

0

斯威夫特3版本脱胎换骨的回答:

let transition:CATransition = CATransition.init() 
    transition.duration = 0.75 
    transition.timingFunction = CAMediaTimingFunction.init(name: kCAMediaTimingFunctionEaseInEaseOut) 
    transition.type = "oglFlip" 
    transition.subtype = kCATransitionFromRight 
    //transition.delegate = self // not needed 
    self.navigationController?.view.layer.add(transition, forKey:nil) 
相关问题