3

我有一个视图控制器(继承自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];
}

唯一的缺点是我愿意接受的新后退按钮的出现。

感谢您的回答:)

4

4 回答 4

3

我想您必须制作自定义后退按钮,并将动画附加到它上面,例如。

- (IBAction) back:(id)sender
{       
    [UIView transitionWithView:self.navigationController.view
                      duration:0.5
                       options:UIViewAnimationOptionTransitionFlipFromLeft
                    animations:^{ [self.navigationController popViewControllerAnimated:NO]; }
                    completion:NULL];
}
于 2013-03-24T12:27:44.093 回答
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"]; 

}

而且效果很好!

于 2013-11-22T14:21:55.483 回答
1

此代码来自此 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视图被交换时,向导航控制器层添加一个淡入淡出过渡(在这种情况下删除弹出的视图控制器视图)。

还请参阅如何在基于导航的应用程序中更改推送和弹出动画

于 2013-03-24T12:21:03.890 回答
0

如果您只是想让后退按钮返回到上一个视图控制器。没有代码更容易做到这一点。相反,只需将控件从后退按钮拖动到前一个视图控制器。(我更喜欢模态动作segue)。这使它更简单,因为它不涉及代码

于 2013-03-24T22:02:40.920 回答