黑屏正在显示的视图控制器下方

问题描述 投票:1回答:2

我试图以模态方式呈现视图控制器。它就像一个弹出式视图控制器。

我正在使用animateTransition方法来设置转换动画。这是我的代码:

extension PopUpViewController: UIViewControllerTransitioningDelegate, UIViewControllerAnimatedTransitioning {

    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        return 0.25
    }

    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {

        guard let fromVC = transitionContext.viewController(forKey: .from) else { return}
        guard let toVC = transitionContext.viewController(forKey: .to) else { return}
        guard let fromView = transitionContext.view(forKey: .from) else { return}
        guard let toView = transitionContext.view(forKey: .to) else { return}

        var containerView = transitionContext.containerView

        if toVC == self {
            // presenting
            containerView.addSubview(toView)
            toView.frame = fromView.frame
            popUpView.transform = CGAffineTransform(scaleX: 0.5, y: 0.5)
            toView.alpha = 0
            UIView.animate(withDuration: 0.25, animations: {
                toView.alpha = 1
                self.popUpView.transform = CGAffineTransform.identity
            }) { _ in

                DispatchQueue.main.async {
                    transitionContext.completeTransition(true)
                }
            }
        } else {
            // dismissing
            UIView.animate(withDuration: 0.25, animations: {
                self.popUpView.transform = CGAffineTransform(scaleX: 0.5, y: 0.5)
                fromView.alpha = 0
            }) { _ in
                transitionContext.completeTransition(true)
            }
        }
    }

    func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        return self
    }

    func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        return self
    }
}

我以这种方式在其他视图控制器(呈现VC)上呈现此视图控制器(呈现VC)。我使用默认的模态演示样式。最初我使用自定义,但我查看了StackOverflow上的一些帖子,他们说要删除它但仍然,我得到一个黑屏(呈现VC),我可以看到它上面的VC。

当我解雇所呈现的VC时,再次呈现VC是可见的。

如果您需要更多详细信息,请告诉我。

根据执行transitionContext.completeTransition(true)时的代码,呈现VC屏幕变黑

ios iphone swift delegates
2个回答
2
投票

你可以试试你的pop-over viewController的modalPresentationStyle到.overCurrentContext.overFullScreen

case overCurrentContext:

一种演示样式,其中内容显示在另一个视图控制器的内容上。

这意味着它将通过viewController的内容呈现下一个viewController。

所以在Container ViewControllers的情况下:

因此,如果你有任何tabBarControllertabBar将允许用户与它进行交互。

case overFullScreen

一种视图演示样式,其中呈现的视图覆盖屏幕。

这意味着它将在fullScreen上显示下一个viewController,因此在演示完成之前taBar将不会是交互式的。

func presentNextController() {
    // In case your viewController is in storyboard or any other initialisation
    guard let nextVC = storyboard.instantiateViewController(with: "nextVC") as? NextViewController else { return }

    nextVC.modalPresentationStyle = .overFullScreen
    // set your custom transitioning delegate

    self.present(nextVC, animated: true, completion: nil)
}

1
投票

您需要设置新的视图控制器

modalPresentationStyle = .overCurrentContext

初始化视图控制器或故事板时执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.