В моем приложении для iPhone у меня есть представление, которое я хочу показывать только в портретном режиме. При переходе к этому виду он должен автоматически отображаться в книжной ориентации. При уходе ориентация должна вернуться к прежней или, если ориентация устройства изменилась, адаптироваться к ней. Я мог найти информацию о принудительной ориентации и предотвращении автоматического поворота. Мне не удалось найти информацию о том, как вернуться к правильной ориентации после выхода из этого представления.
Итак, моя идея состояла в том, чтобы
- сохранить начальную ориентацию (сохранить в
currentOrientation
) - подпишитесь на событие изменения ориентации, чтобы отслеживать изменения ориентации, когда содержимое заблокировано в книжной ориентации (обновление
currentOrientation
) - при выходе из вида восстановить правильную ориентацию, используя значение
currentOrientation
.
Изменить (код удален): помимо того, что это не работало, это был опасный путь, поскольку он широко использовал неподдерживаемые API.
Редактировать:
Я считаю, что теперь этот вопрос можно свести к следующему:
Существует ли задокументированный поддерживаемый способ принудительной ориентации интерфейса независимо от ориентации устройства?
setValue(UIInterfaceOrientation.Portrait.rawValue, forKey: "orientation")
много раз рекомендовали на SO и в других местах, но это действительно кажется неподдерживаемым взломом.Существует ли задокументированный поддерживаемый способ обновить ориентацию интерфейса в соответствии с ориентацией устройства? Это было бы необходимо для «восстановления» после принудительной ориентации интерфейса в другом представлении без необходимости запуска автоматического поворота путем поворота устройства вперед и назад.
Поддерживаются supportedInterfaceOrientations()
и shouldAutorotate()
. Но они заблокируют интерфейс только после того, как устройство будет повернуто в это положение. Они не предотвращают неправильную начальную ориентацию.
Есть много вопросов, похожих на этот, которые показывают, что такая постановка задачи не является редкостью, но пока нет удовлетворительного и полного решения с использованием поддерживаемых методов.
setValue(… forKey: "orientation")
, потому что это недокументировано и поддерживается. Вы должны быть в состоянии достичь того, чего хотите, используяsupportedInterfaceOrientations()
,shouldAutorotate()
иattemptRotationToDeviceOrientation()
. - person Aaron Brager   schedule 03.07.2015setValue()
используется для принудительного портретного просмотра, когда он открывается, когда устройство находится в альбомной ориентации.supportedInterfaceOrientations()
иshouldAutoRotate()
не позаботились об этом. Мне нужно было сначала повернуть устройство в портретный режим, а затем вид был заблокирован в портретном режиме. Я нашел несколько ссылок на методsetValue()
, что, конечно, не делает его хорошей практикой. Как еще я могу этого добиться? - person jerry   schedule 03.07.2015