Почему 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() метод, если ориентация меняется. Мне все еще интересно, почему другой метод не работает, но обходной путь подойдет.

Другие вопросы по тегам