容器视图在completeTransition上消失:

我正在使用自定义视图控制器转换UIViewControllerAnimatedTransitioning来呈现和closures视图控制器。

呈现animation工作正常,但是当我运行解除animation时,一旦我呼叫completeTransition: containerView被删除。

我不确定发生了什么,这是转换代码:

 - (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext { UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; UIView *containerView = [transitionContext containerView]; containerView.backgroundColor = [UIColor blackColor]; if (self.reverse) { [containerView addSubview:toViewController.view]; [containerView addSubview:fromViewController.view]; } else { [containerView addSubview:fromViewController.view]; [containerView addSubview:toViewController.view]; } if (! self.reverse) { // Forward toViewController.view.frame = CGRectMake(-containerView.frame.size.width, 0, containerView.frame.size.width, containerView.frame.size.height); } else { fromViewController.view.frame = CGRectMake(0, 0, containerView.frame.size.width, containerView.frame.size.height); } [UIView animateWithDuration:[self transitionDuration:transitionContext] delay:0 usingSpringWithDamping:0.75f initialSpringVelocity:1.0f options:UIViewAnimationOptionCurveLinear animations:^{ if (self.reverse) { fromViewController.view.frame = CGRectMake(-containerView.frame.size.width, 0, containerView.frame.size.width, containerView.frame.size.height); fromViewController.view.layer.opacity = 0.f; toViewController.view.layer.opacity = 1.f; } else { toViewController.view.frame = CGRectMake(0, 0, containerView.frame.size.width, containerView.frame.size.height); toViewController.view.layer.opacity = 1.f; fromViewController.view.layer.opacity = 0.3f; } } completion:^(BOOL finished) { [transitionContext completeTransition:finished]; }]; } - (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext { if (self.reverse) { return 0.45; } else { return 0.35; } } 

。如果.reverse设置为YES如何防止我的toViewController消失?

更新:这是我如何呈现视图控制器:

 SecondaryViewController *vc = [[SecondaryViewController alloc] init]; UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:vc]; navigationController.modalPresentationStyle = UIModalPresentationCustom; navigationController.transitioningDelegate = self; [self presentViewController:navigationController animated:YES completion:nil]; 

容器视图在解雇上消失是正确的行为。 你的错误是添加fromView到它。

你不正确地区分这是表示还是解雇,以及你应该怎样做。 只需使用fromViewControllertoViewController的两个视图控制器来区分它们; 在解雇时,angular色被扭转。 解雇时,不要在内容视图中添加任何内容; 原始的演示者仍然存在,并将通过删除容器视图来显示。

因此,在演示文稿中,只将toView添加到容器视图。 解雇后,不要向容器视图添加任何内容。 就这么简单。