Почему viewWillTransition(to size:...) не работает, если я ухожу от View Control и обратно?
У меня есть UIView
подкласс называется myView
это должно измениться при изменении ориентации устройства. Я использую viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)
метод в UIViewController
позвонить setUp()
метод, который перенастраивает представление. Проблема, с которой я сталкиваюсь, заключается в том, что он работает при первой загрузке этого конкретного контроллера представления, но если я ухожу, то к нему код больше не работает. В чем дело? Код выглядит следующим образом:
@IBOutlet weak var myView: UIView!
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
self.myView.setUp()
}
Если я использую устаревший метод didRotate(from fromInterfaceOrientation: UIInterfaceOrientation)
вместо этого код работает правильно каждый раз.
2 ответа
Поскольку self.myView.setUp()
вызывается каждый раз, когда я подозреваю, что представление не обновляется из-за неверной ссылки.
Попробуйте сделать его сильным, если это плохая ссылка, это должно исправить
@IBOutlet var myView: UIView!
Итак, я до сих пор не понял, почему происходит первоначальная проблема, но я нашел обходной путь. Обычно можно было бы просто рассчитать ориентацию на основе UIScreen.main.bounds
в viewDidLayoutSubviews()
метод, но у меня есть таймер, который срабатывает с частотой обновления экрана, так что метод вызывается 60 раз в секунду, и мой myView.setUp()
метод слишком трудоемкий, чтобы это работало. Итак, я дал мой UIViewController
orientation
свойство с наблюдателем сеттера, с этим свойством, вычисляемым и устанавливаемым в viewDidLayoutSubviews()
, Наблюдатель-установщик затем вызывает setUp()
метод, если ориентация меняется. Мне все еще интересно, почему другой метод не работает, но обходной путь подойдет.