首页 > 解决方案 > 在 Swift 中的过渡更改后移动事物

问题描述

我之前问了一个关于从横向转换到纵向时遇到的一些布局问题的问题。我在这里问但没有得到回应。分析问题后,我认为我的问题是我正在调用 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 方法。

标签: iosswiftuiview

解决方案


将您的 resetPositions() 放入协调器动画方法的完成块中。

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
        super.viewWillTransition(to: size, with: coordinator)
        coordinator.animate(alongsideTransition: nil) { (context) in
            resetPositions()
        }
    }

推荐阅读