如何避免animateTransition(transitionContext)协议方法(在navigationController推送方法中)删除以前的ViewController视图?

时间:2015-02-03 15:18:00

标签: ios swift uiviewcontroller uinavigationcontroller

我必须推送一个具有α为0.5的调光视图的viewController。因此,ViewController的视图必须显示此调光背景背后的前一个控制器视图。问题是我正在使用一个使用UIViewControllerAnimatedTransitioning协议的navigationController来自定义动画。默认情况下,在将新viewController推入堆栈后,navigationController会自动删除以前的视图。那么,如何在完成此转换后保留上一个视图,这可能吗?

注意:我不想只是将控制器的视图添加到navigationController(这给了我导航功能中的奇怪行为),我确实需要以这种方式推送它,所以我可以继续使用该应用程序代码模式。

CODE:

func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
    if isPresenting {
        let ContainerView = transitionContext.containerView()
        if let PresentedController = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey) {
            if let PresentedView = transitionContext.viewForKey(UITransitionContextToViewKey) {
            PresentedView.alpha         = 0
            PresentedView.frame         = transitionContext.finalFrameForViewController(PresentedController)

            ContainerView.addSubview(PresentedView)
            // i've also tried to add the fromView in the containerView.

            UIView.animateWithDuration(0.4, animations: {
                PresentedView.alpha     = 1
            }) {
                Completion in
                transitionContext.completeTransition(Completion)
            }
        }
        }
    } else {
        // dismiss code...
    }
}

感谢您的耐心等待。

1 个答案:

答案 0 :(得分:0)

几周前,我有类似的情况。就我而言,我是以模态方式呈现我的视图控制器。我解决这个问题的方法是拍摄fromViewController视图的快照,并将其用作toViewController视图的背景。

捕获快照:

UIImage *snapshotImage = nil;
UIGraphicsBeginImageContextWithOptions(self.tabBarController.view.frame.size, NO, 0.0);
if ([self.tabBarController.view drawViewHierarchyInRect:self.tabBarController.view.bounds afterScreenUpdates:YES]) {
                snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
                UIGraphicsEndImageContext();
            }

您可以为此捕获transitionContext.containerView。将此图像传递给新VC,并将其设置为该VC视图的背景:

self.view.backgroundColor = [UIColor colorWithPatternImage:self.bgImage];

P.S。我不熟悉Swift所以你必须将代码转换为快速自己,但希望这给你一个不错的起点