#swift #view #controller #switch-statement
#swift #Вид #контроллер #switch-инструкция
Вопрос:
Можно ли переключиться на другой контроллер представления, только повернув устройство влево / вправо?
Я бы попробовал это с помощью: // LandscapeTabView
override func viewWillLayoutSubviews() {
if UIDevice.current.orientation == UIDeviceOrientation.landscapeLeft || UIDevice.current.orientation == UIDeviceOrientation.landscapeRight {
}
else {
}
Но не знаете, что заполнить в этой функции?
Спасибо за помощь новичку!
Ответ №1:
Во-первых: вы можете подписаться на системное уведомление о вращении устройства следующим образом
NotificationCenter.default.addObserver(self, selector: #selector(self.orientationChanged), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
Затем создайте функцию
func orientationChanged() {}
Для правильного определения состояния я рекомендую использовать этот метод
UIApplication.shared.statusBarOrientation == .portrait
Если его true — портрет, false — пейзаж
Таким образом, в зависимости от состояния, например, вы можете поместить некоторый vc в альбомную ориентацию и вставить его, когда устройство будет возвращено. Для нажатия вы можете легко создать экземпляр вашего ViewController таким образом
let vc = self.storyboard?.instantiateViewControllerWithIdentifier("here_is_vc_id") as! YourViewController
И для pop:
_ = navigationController.pushViewController(vc, animated: true)
Примечание: VC, который вы создаете, должен храниться на одной (и основной) раскадровке. Также вам необходимо настроить is (куда идет строка «here_is_vc_id») в инспекторе идентификации в поле «Идентификатор раскадровки».
Вот так 🙂
Ответ №2:
Попробуйте мои небольшие усилия-
func rotated()
{
if(UIDeviceOrientationIsLandscape(UIDevice.currentDevice().orientation))
{
print("landscapeMode")
let nextView = self.storyboard?.instantiateViewControllerWithIdentifier("HomeWorkViewController") as! HomeWorkViewController
self.navigationController?.pushViewController(nextView, animated: true)
}
if(UIDeviceOrientationIsPortrait(UIDevice.currentDevice().orientation))
{
print("PortraitMode")
//As you like
}
}
Ответ №3:
Предложенные подходы действительны, но рекомендуемый способ реагирования на такого рода изменения — использовать UIContentContainer
протокол (iOS8 ).
Затем вы можете добавить дочерний контроллер представления к своему контроллеру и управлять тем, как он должен анимироваться. Вы можете использовать это в качестве ссылки: реализация контроллера представления контейнера.
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
let isPortrait = size == UIScreen.mainScreen().fixedCoordinateSpace.bounds.size
// Add a child view controller if landscape, remove it if portrait...
}