Размотка Segue удаляет оригинальный VC из поля зрения, почему? - PullRequest
0 голосов
/ 03 мая 2018

Я сейчас начинаю тянуть волосы за этот, так что некоторая помощь будет высоко ценится.

У меня есть переход (слайд справа), который прекрасно работает и показывает новый view справа.

Я сейчас пытаюсь вернуться и раскрутить переход с помощью следующего пользовательского класса.

Кажется, все работает нормально, и я вижу, как первый вид сдвигается назад слева, но проблема в том, что он сразу исчезает из вида.

Единственный звонок dismiss, который у меня есть, находится на originalVC, который в приведенном ниже классе раскрутки является представлением, от которого я отказываюсь, от которого я хочу отказаться.

//Segue: Unwind From Right
class UnwindSegueFromRight: UIStoryboardSegue {
    override func perform(){


        let originalVC = self.source
        let destinationVC = self.destination

        originalVC.view.superview?.insertSubview(destinationVC.view, aboveSubview: originalVC.view)


        destinationVC.view.transform = CGAffineTransform(translationX: -originalVC.view.frame.size.width, y: 0)

        UIView.animate(withDuration: 0.25,
                       delay: 0.0,
                       options: UIViewAnimationOptions.curveEaseInOut,
                       animations: {
                        destinationVC.view.transform = CGAffineTransform(translationX: 0, y: 0)
        },
                       completion: { finished in
                        originalVC.dismiss(animated: false, completion: nil)
        })
    }
}//end class

РЕДАКТИРОВАТЬ : Добавление вида к keyWindow в соответствии с приведенными ниже правками привело к появлению нового набора проблем, tabBar исчезает из вида, когда я раскручиваюсь.

class UnwindSegueFromRight: UIStoryboardSegue {
    override func perform(){


        let originalVC = self.source
        let destinationVC = self.destination

        UIApplication.shared.keyWindow?.insertSubview(destinationVC.view, aboveSubview: originalVC.view)


        destinationVC.view.transform = CGAffineTransform(translationX: -originalVC.view.frame.size.width, y: 0)

        UIView.animate(withDuration: 0.25,
                       delay: 0.0,
                       options: UIViewAnimationOptions.curveEaseInOut,
                       animations: {
                        destinationVC.view.transform = CGAffineTransform(translationX: 0, y: 0)
        },
                       completion: { finished in
                        originalVC.dismiss(animated: false, completion: nil)
        })
    }
}//end class

Вот класс SegueFromRight, который является начальным результатом

//Segue: From Right
class SegueFromRight: UIStoryboardSegue {
    override func perform(){

        let originalVC = self.source
        let destinationVC = self.destination




        UIApplication.shared.keyWindow?.insertSubview(destinationVC.view, aboveSubview: originalVC.view)


        destinationVC.view.transform = CGAffineTransform(translationX: originalVC.view.frame.size.width, y: 0)

        UIView.animate(withDuration: 0.25,
                       delay: 0.0,
                       options: UIViewAnimationOptions.curveEaseInOut,
                       animations: {
                        destinationVC.view.transform = CGAffineTransform(translationX: 0, y: 0)
        },
                       completion: { finished in
                        originalVC.present(destinationVC, animated: false, completion: nil)
        })
    }
}//end class

1 Ответ

0 голосов
/ 03 мая 2018

Вы добавили destinationVC.view к originalVC, поэтому при отклонении вашего originalVC вы также избавляетесь от destinationVC.view. Другими словами:

Перед тем, как позвонить в службу Disney на originalVC, вы должны позвонить:

destinationVC.view.removeFromSuperview()

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