【问题标题】:iOS: Customize Back Button Transition AnimationiOS:自定义后退按钮过渡动画
【发布时间】:2013-03-24 12:07:00
【问题描述】:

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

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

感谢您的回答:)

【问题讨论】:

    标签: ios objective-c animation uinavigationcontroller back


    【解决方案1】:

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

    - (IBAction) back:(id)sender
    {       
        [UIView transitionWithView:self.navigationController.view
                          duration:0.5
                           options:UIViewAnimationOptionTransitionFlipFromLeft
                        animations:^{ [self.navigationController popViewControllerAnimated:NO]; }
                        completion:NULL];
    }
    

    【讨论】:

    • 我认为自定义后退按钮是可行的方法,但我希望在代码中执行此操作。我对 Objective C 有点陌生,但据我所知,这与构建我不使用的 .xib 文件有关。
    【解决方案2】:

    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

    【讨论】:

      【解决方案3】:

      我是这样做的:

      -(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"]; 
      

      }

      而且效果很好!

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-20
          • 2016-04-30
          • 1970-01-01
          • 2021-08-17
          • 2020-07-21
          • 1970-01-01
          相关资源
          最近更新 更多