导航栏在自定义展开segue的动画中不可见

时间:2014-06-20 17:00:25

标签: ios objective-c animation segue uistoryboardsegue

我在导航控制器中使用自定义展开segue,在动画中,当动画结束导航栏“弹出”时,在segue的动画中导航栏不可见。 ¿如何在动画期间保留导航栏的可见性?

更多详情:

我在导航栏中有一个按钮,调用此动画按预期执行的模态视图,新视图有一个按钮,用于触发展开视图生长和消失的展开动画,而此动画正在执行导航栏中在动画结束之前,目标视图控制器不可见。

这是我用于自定义segue的代码。

- (void) perform {
    UIViewController *sourceViewcontroller  = self.sourceViewController;
    UIViewController *destinationViewcontroller = self.destinationViewController;

    [sourceViewcontroller.view.superview insertSubview:destinationViewcontroller.view atIndex:0];

    [destinoViewcontroller beginAppearanceTransition:YES animated:YES];

    [UIView animateWithDuration:0.2
                          delay:0.0
                        options:UIViewAnimationOptionCurveEaseInOut
                     animations:^{
                         origenViewcontroller.view.transform = CGAffineTransformMakeScale(1.5, 1.5);
                         origenViewcontroller.view.alpha = 0.0;
                     }
                     completion:^(BOOL finished){
                         [destinationViewcontroller.view removeFromSuperview];
                         [sourceViewcontroller dismissViewControllerAnimated:NO completion:NULL];
                     }];
}

好的,所以我想我明白了,我所做的是在源视图的超级视图中插入整个导航控制器视图并删除代码从中移除目标视图superview 并设置为 YES 选项 dismissViewControllerAnimated ,如下所示:

- (void) perform {
    UIViewController *origenViewcontroller  = self.sourceViewController;
    UIViewController *destinoViewcontroller = self.destinationViewController;

    [origenViewcontroller.view.superview insertSubview:destinoViewcontroller.navigationController.view atIndex:0];

    [UIView animateWithDuration:0.4
                          delay:0.0
                        options:UIViewAnimationOptionCurveEaseInOut
                     animations:^{
                         origenViewcontroller.view.transform = CGAffineTransformMakeScale(2.0, 2.0);
                         origenViewcontroller.view.alpha = 0.0;
                     }
                     completion:^(BOOL finished){
                         [origenViewcontroller dismissViewControllerAnimated:YES completion:NULL];
                     }];
}

我仍然不确定这是否是正确的方法。

1 个答案:

答案 0 :(得分:1)

您也可以将destinationViewController嵌入UINavigationController并将您的segue从sourceViewController设置为Navigation Controller