перемещение вещей после смены перехода в Swift - PullRequest
0 голосов
/ 21 января 2019

Ранее я задавал вопрос о некоторых проблемах с макетом, которые возникают у меня при переходе от пейзажа к портрету.Я спросил здесь, но не получил ответа.После анализа проблемы я думаю, что моя проблема в том, что я вызываю метод репозиции на viewWillTransition:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    resetPositions()
}

func resetPositions() {
    if isMainContainer {
        if UIApplication.shared.statusBarOrientation.isLandscape {
            containerViewBot.center.y = containedView.center.y
            containerViewBotBack.center.y = containedView.center.y - offset
        } else {
            containerViewBot.center.x = self.view.center.x
            containerViewBotBack.center.x = self.view.center.x - offset
        }
    } else {
        if UIApplication.shared.statusBarOrientation.isLandscape {
            containerViewBotBack.center.y = containedView.center.y
            containerViewBot.center.y = containedView.center.y + offset
        } else {
            containerViewBotBack.center.x = self.view.center.x
            containerViewBot.center.x = self.view.center.x + offset
        }
    }
}  

Я хотел знать, как вызвать этот метод ПОСЛЕ перехода, что-то вроде viewDidFinishTransition или как можноЯ вызываю метод resetPosition ПОСЛЕ того, как окна были перестроены в новый режим (альбомная / книжная).

Ответы [ 2 ]

0 голосов
/ 21 января 2019

поместите свой resetPositions () в блок завершения метода animate координатора.

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
        super.viewWillTransition(to: size, with: coordinator)
        coordinator.animate(alongsideTransition: nil) { (context) in
            resetPositions()
        }
    }
0 голосов
/ 21 января 2019

Используйте параметр coordinator.Он относится к типу UIViewControllerTransitionCoordinator и предоставляет вызов, который вы можете сделать, который будет сделан после перехода (или вместе с переходом по мере необходимости.

. Также прочтите это из документации для viewWillTransition:

Если вы переопределите этот метод в своих пользовательских контроллерах представления, всегда вызывайте super в какой-то момент вашей реализации, чтобы UIKit мог соответствующим образом переслать сообщение об изменении размера.

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)

    coordinator.notifyWhenInteractionChanges { (context) in
        // Called after the transition
        resetPositions()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...