我有一个名为myView
的UIView
子类,当设备方向改变时,它应该重新配置自己。我在UIViewController
中使用viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)
方法来调用重新配置视图的setUp()
方法。我遇到的问题是它在我第一次加载该特定视图控制器时工作,但是如果我离开然后返回它,代码将不再有效。怎么了?代码如下:
@IBOutlet weak var myView: UIView!
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
self.myView.setUp()
}
如果我改用已弃用的方法didRotate(from fromInterfaceOrientation: UIInterfaceOrientation)
,则代码每次都能正常工作。
由于每次调用self.myView.setUp()
时都会调用视图,因此我怀疑视图由于引用错误而没有更新。
尝试使其强大,如果这是一个错误的引用,那么这应该可以修复它
@IBOutlet var myView: UIView!
所以,我仍然没有弄清楚为什么会发生原始问题,但我确实想出了一个解决方法。通常,可以根据viewDidLayoutSubviews()
方法中的UIScreen.main.bounds
计算方向,但是我有一个以屏幕刷新率触发的计时器,因此该方法被调用60次/秒,并且我的myView.setUp()
方法过于处理器密集型,无法正常工作。因此,我为我的UIViewController
提供了一个带有二传手观察器的orientation
属性,该属性在viewDidLayoutSubviews()
内计算和设置。然后,如果方向发生更改,二传手观察者将调用setUp()
方法。我仍然很好奇为什么另一种方法不起作用,但解决方法可以。