我有一个视图控制器(继承自UIViewController
),它具有用于呈现数据的自定义逻辑。它可以初始化一个新的视图控制器(相同类型)并使用它来显示它
[self.navigationController pushViewController:next animated:NO]
(接下来是新实例化的控制器),创建“视图堆栈”的体验,使用导航控制器默认后退按钮向上导航。
现在,在调用pushViewController:animated:
之前,我可以通过调用[self.navigationController.view.layer addAnimation:animation forKey:nil]
来自定义过渡动画。这非常适用于“沿着堆栈”查看。
但是,由于使用默认后退按钮以默认方式完成向上导航,因此使用的转换是默认的向左滑动动画,与我的自定义动画不匹配。
如何自定义此过渡动画?
编辑:
我接受了这里给出的想法并想出了:
UIBarButtonItem *back = [[UIBackButtonItem alloc] initWithTitle:@"\U000025C0\U0000FE0E" style:UIBarButtonItemStylePlain target:self action:@selector(back:)];
[self.navigationItem setLeftBarButtonItem:back]
转型:
- (IBAction)back:(id)sender {
CATransiotion *animation = [CATransition animation];
animation.duration = 0.3f;
amimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
animation.type = kCATransitionMoveIn;
[self.navigationController.view.layer addAnimation:animation forKey:nil];
[self.navigationController popViewControllerAnimated:NO];
}
唯一的缺点是我愿意忍受的新后退按钮的出现。
感谢您的回答:)
答案 0 :(得分:3)
我猜你必须制作自定义后退按钮,并将动画附加到它上面,例如
- (IBAction) back:(id)sender
{
[UIView transitionWithView:self.navigationController.view
duration:0.5
options:UIViewAnimationOptionTransitionFlipFromLeft
animations:^{ [self.navigationController popViewControllerAnimated:NO]; }
completion:NULL];
}
答案 1 :(得分:1)
This code got from this Queston.
对于这种类型的过渡,我真的建议使用模态视图控制器,这就是系统的设计方式。
但是如果你坚持使用导航控制器有一种方法,虽然有点难看。
[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
在交换视图时向导航控制器层添加淡入淡出过渡(在这种情况下,删除弹出的视图控制器视图)。
另请参阅此How to change the Push and Pop animations in a navigation based app
答案 2 :(得分:1)
我这样做:
-(void)viewWillDisappear:(BOOL)animated {
CATransition *anim = [CATransition animation];
anim.duration = 1;
anim.type = @"cube";
anim.subtype = @"fromLeft";
[super viewWillDisappear:animated];
[self.navigationController.view.layer addAnimation:anim forKey:@"an"];
}
效果很好!
答案 3 :(得分:0)
如果您只是想让后退按钮返回上一个视图控制器。没有代码就更容易做到这一点。而只是将控制拖动从后退按钮拖动到上一个视图控制器。 (我更喜欢模态动作segue)。这使得它更简单,因为它不涉及代码