iOS:自定义后退按钮过渡动画
我有一个视图控制器(继承自iOS:自定义后退按钮过渡动画,ios,objective-c,animation,uinavigationcontroller,back,Ios,Objective C,Animation,Uinavigationcontroller,Back,我有一个视图控制器(继承自UIViewController),它具有用于显示数据的自定义逻辑。它可以初始化一个新的视图控制器(相同类型),并使用 [self.navigationController推送视图控制器:下一个动画:否] (下一步是新实例化的控制器),创建“视图堆栈”体验,使用导航控制器默认的后退按钮向上导航堆栈 现在,在调用pushViewController:animated:之前,我可以通过调用[self.navigationController.view.layer addAn
UIViewController
),它具有用于显示数据的自定义逻辑。它可以初始化一个新的视图控制器(相同类型),并使用
[self.navigationController推送视图控制器:下一个动画:否]
(下一步是新实例化的控制器),创建“视图堆栈”体验,使用导航控制器默认的后退按钮向上导航堆栈
现在,在调用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];
}
唯一的缺点是新的后退按钮的出现,我愿意接受它
谢谢你的回答:)
对于这种类型的转换,我真的建议使用模态视图控制器,这就是系统的设计方式
但是如果你坚持使用导航控制器,有一种方法,尽管有点难看
[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
将禁用所有标准动画。交换视图时,CATTransition
向导航控制器层添加淡入淡出过渡(在本例中,删除弹出的viewcontroller视图)
同时也参考这个我想你必须制作你的自定义后退按钮,并将你的动画附加到它上,例如
- (IBAction) back:(id)sender
{
[UIView transitionWithView:self.navigationController.view
duration:0.5
options:UIViewAnimationOptionTransitionFlipFromLeft
animations:^{ [self.navigationController popViewControllerAnimated:NO]; }
completion:NULL];
}
如果只是想使“后退”按钮返回到上一个视图控制器。不需要代码就可以更轻松地完成这项工作。相反,只需将控件从“后退”按钮拖动到上一个视图控制器。(我更喜欢情态动作片段)。这使它更简单,因为它不涉及代码我这样做:
-(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"];
}
而且效果很好 我认为一个自定义的后退按钮是最好的选择,但我希望在代码中这样做。我对Objective C有点陌生,但据我所知,这与构建我不使用的.xib文件有关。