Почему главные представления не выровнены для контроллеров представления в пользовательском переходе перекрестного растворения? - PullRequest
1 голос
/ 13 апреля 2019

Я написал собственный подкласс UIStoryboardSegue для создания переходов постепенного исчезновения / постепенного исчезновения, перекрестного растворения между двумя UIViewControllers.

Основные виды контроллера вида имеют кнопки, которые центрированы внутри каждого из них (помечены «Контроллер вида 1» и «Контроллер вида 2»), поэтому я предполагаю, что при перекрестном слиянии одного с другим - настройкаони оба являются потомками одного и того же суперпредставления и делают их кадры одинаковыми - кнопки также будут выровнены.

class SwapSegue: UIStoryboardSegue {

    override func perform() {
        fade()
    }

    func fade() {
        destination.view.alpha = 0

        source.view.superview?.addSubview(destination.view)
        destination.view.frame = source.view.frame

        UIView.animate(withDuration: 1, delay: 0, options: .curveEaseInOut, animations: {
            self.destination.view.alpha = 1
        }, completion: { success in
            if var controllerStack = self.source.navigationController?.viewControllers {
                controllerStack[controllerStack.firstIndex(of: self.source)!] = self.destination
                self.source.navigationController?.setViewControllers(controllerStack, animated: false)
            } else {
                self.source.present(self.destination, animated: false, completion: nil)
            }
        })

    }
}

Это почти работает, но не правильно позиционирует вид назначения во время перехода,таким образом, в конце, когда анимация segue заканчивается, появляется «pop». Похоже, что выравнивание примерно на высоту навигационной панели отключено, поэтому я подозреваю, что это ключ.

Swap pop

(Примечание: в этом циклическом GIF вы можете увидеть нажатие кнопки «View Controller 1», анимированное перекрестное затухание со смещенными кнопками, а затем «pop» в конце, когда анимациязавершается, и контроллер представления назначения наконец помещается правильно.)

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

1 Ответ

0 голосов
/ 14 апреля 2019

Я нашел решение. Я не уверен на 100%, почему это работает, поэтому, если вы можете это объяснить, пожалуйста, сделайте это в комментариях ниже.

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

Добавив подпредставление (назовем его «Представлением содержимого») к основному виду каждого контроллера представления, закрепив его по краям, и центрировав каждую кнопку в в представлении, переход теперь работает, как и ожидалось.

Intermediate

enter image description here

...