Пользовательский класс segue аварийно завершает работу с потоком 1: EXC_BAD_ACCESS (код = 2, адрес = 0x16ecb3ff0) - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь создать приложение с универсальным фоновым изображением.Поскольку большинство моих фонов ViewController настроены на прозрачный цвет, это представляет проблему для большинства переходов.Мое решение состояло в том, чтобы попытаться создать этот пользовательский класс segue, который перемещает исходный VC влево и вытягивает новый VC справа.Однако я получаю эту ошибку:

Поток 1: EXC_BAD_ACCESS (код = 2, адрес = 0x16ecb3ff0

В конструкторе интерфейса Storyboard Segue: у меня есть пользовательский класссвязать, и установить вид «Пользовательский». Анимация включена. Этот переход работает с моего виртуального экрана входа в систему на Забыли пароль ВК, но не работает, если я использую его на своих контактах ВК для добавления контакта ВК.

Не уверен, почему он работает на одном, а не на другом? Я просто делаю все это неправильно? (Я новичок в разработке и изучении iOS)

class PushSegue: UIStoryboardSegue {

    override func perform() {
        push()
    }

    func push () {
        let toViewController = self.destination
        let fromViewController = self.source

        let containerView = fromViewController.view.superview
        let originalCenter = fromViewController.view.center

        fromViewController.view.transform = CGAffineTransform(translationX: 0, y: 0)
        fromViewController.view.center = originalCenter

        toViewController.view.transform = CGAffineTransform(translationX: 600, y: 0)
        toViewController.view.center = originalCenter

        containerView?.addSubview(toViewController.view)

        UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseInOut, animations: { toViewController.view.transform = CGAffineTransform.identity
            fromViewController.view.transform = CGAffineTransform (translationX: -600, y: 0)
        }, completion: {success in
            fromViewController.present(toViewController, animated: false, completion: nil) //Crashes here
        })

    }

}

class UnwindPushSegue: UIStoryboardSegue {

    override func perform() {
        push()
    }

    func push () {
        let toViewController = self.destination
        let fromViewController = self.source

        fromViewController.view.superview?.insertSubview(toViewController.view, at: 0)
        toViewController.view.superview?.insertSubview(toViewController.view, at: -600)

        UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseInOut, animations: { fromViewController.view.transform = CGAffineTransform.init(translationX: 600, y: 0)
            toViewController.view.transform = CGAffineTransform.init(translationX: 0, y: 0)
        }, completion: {success in
            fromViewController.dismiss(animated: false, completion: nil)
        })

    }
}

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

...