我使用自定义视图控制器转换UIViewControllerAnimatedTransitioning来呈现和关闭视图控制器.
演示动画工作正常,但是当我运行关闭动画时,一旦我调用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,containerView.frame.size.width,containerView.frame.size.height); } else { fromViewController.view.frame = CGRectMake(0,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,containerView.frame.size.height); fromViewController.view.layer.opacity = 0.f; toViewController.view.layer.opacity = 1.f; } else { toViewController.view.frame = CGRectMake(0,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添加到它.
您是否正确地区分这是呈现还是解雇,以及您应该在每种情况下做什么.只需使用来自ViewController和ToViewController的两个视图控制器将它们分开;解雇后,角色被扭转了.解雇时,不要对内容视图添加任何内容;原始主持人仍然存在,并将通过清除集装箱视图来显示.
因此,在演示文稿中,只将toView添加到容器视图.解雇时,不要在容器视图中添加任何内容.就这么简单.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。