导航控制器中的后退按钮动画
Posted
技术标签:
【中文标题】导航控制器中的后退按钮动画【英文标题】:Back Button Animation in Navigation Controller 【发布时间】:2010-06-30 04:20:08 【问题描述】:CATransitions 可用于在向下钻取时为导航控制器中的过渡设置动画。但是,当使用返回按钮 og 导航控制器(返回)时,动画仍会滑出。有谁知道如何将 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];
【问题讨论】:
可以参考这个链接***.com/a/45343228/5437576 【参考方案1】:无需创建自定义按钮...您可以简单地执行以下操作:
- (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
【讨论】:
我刚试过这个并且开箱即用(漂亮的动画和所有:-) 这会通过苹果的审查吗?为什么这会覆盖自定义导航的动画? (我的意思是,我很高兴这样做,但根据代码不会这么说)【参考方案2】:要为后退按钮添加动画,您必须创建自己的后退按钮,并在后退按钮动作上指定您想要的动画。
向导航栏添加后退按钮:将此行添加到您的 viewDidLoad 方法中:
self.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemReply target:self action:@selector(back)];
在后面的方法中添加这段代码:
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];
【讨论】:
shadowfax 发布的答案并没有完全删除呈现视图控制器完成的幻灯片动画。使用这个答案(自定义后退按钮)最适合替换动画,尽管我现在必须提供自定义后退按钮图像。【参考方案3】:我不确定我是否理解这个问题。 UINavigationController
在切换视图时已经使用了幻灯片过渡。如果您想将自定义转换附加到后退按钮,您将必须创建一个自定义后退按钮并将其连接到将运行您的 CATransition
代码的操作。
【讨论】:
就是这样。 UINavigationController 使用幻灯片过渡,我需要它来翻转。【参考方案4】:如果您想要导航控制器栏的后退按钮等动画,只需将以下代码放入您的操作中。
[self.navigationController popViewControllerAnimated:YES];
【讨论】:
【参考方案5】:Swift 3 版本的 shadowfax 答案:
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)
【讨论】:
以上是关于导航控制器中的后退按钮动画的主要内容,如果未能解决你的问题,请参考以下文章