Черный экран идет под представленным контроллером вида - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь представить контроллер вида модально.Это как всплывающее окно просмотра контроллера.

Я использую метод 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
    }
}

Я представляю этот контроллер представления (Presented VC) поверх другого контроллера представления (Presenting VC) таким образом.Я использую модальный стиль презентации по умолчанию.Первоначально я использовал кастом, но я посмотрел некоторые посты в StackOverflow, и они сказали удалить его, но все же я получаю черный экран (представляющий VC), и я могу видеть представленный VC поверх него.

Когда яя отклоняю представленный VC, снова видимый VC видим.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Согласно коду при выполнении transitionContext.completeTransition(true), отображается экран VCстановится черным

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Вы можете попробовать modalPresentationStyle вашего всплывающего окна viewController для .overCurrentContext или .overFullScreen.

case overCurrentContext:

Стиль представления, в котором содержимоеотображается поверх содержимого другого контроллера представления.

Это означает, что он будет представлять следующий viewController поверх содержимого viewController.

Так, в случае Контейнеров ViewControllers:

Итак, если у вас есть tabBarController, tabBar позволит пользователю взаимодействовать с ним.

case overFullScreen

Стиль представления представления, в котором представленное представление покрывает экран.

Это означает, что оно будет отображать следующий viewController поверхfullScreen, поэтому 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)
}
0 голосов
/ 15 сентября 2018

Вам необходимо установить новый контроллер вида

modalPresentationStyle = .overCurrentContext

Сделайте это при инициализации контроллера представления или в раскадровке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...