黑屏正在显示的视图控制器下方
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了黑屏正在显示的视图控制器下方相关的知识,希望对你有一定的参考价值。
我试图以模态方式呈现视图控制器。它就像一个弹出式视图控制器。
我正在使用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屏幕变黑
你可以试试你的pop-over viewController的modalPresentationStyle到.overCurrentContext
或.overFullScreen
。
case overCurrentContext:
一种演示样式,其中内容显示在另一个视图控制器的内容上。
这意味着它将通过viewController的内容呈现下一个viewController。
所以在Container ViewControllers的情况下:
因此,如果你有任何tabBarController
,tabBar
将允许用户与它进行交互。
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)
}
您需要设置新的视图控制器
modalPresentationStyle = .overCurrentContext
初始化视图控制器或故事板时执行此操作。
以上是关于黑屏正在显示的视图控制器下方的主要内容,如果未能解决你的问题,请参考以下文章