iOS Отключение альбомной ориентации LaunchScreen.storyboard

У меня есть LaunchScreen.storybaord, который показывает логотип (текстовый, поэтому он не зависит от ориентации). Приложение всегда запускается в портретной ориентации, но у него есть определенные контроллеры представления, которые разрешают ландшафтный режим (поэтому создание портретной ориентации приложения невозможно).

Я хочу, чтобы экран запуска всегда отображался в портретной ориентации. Таким образом, удерживание телефона в альбомной ориентации во время запуска приложения должно привести к тому, что логотип будет повернут (как если бы вы смотрели на контроллер представления, который не поддерживает альбомную ориентацию).

Есть ли способ сказать, что раскадровка будет только портретной?

Я пытался использовать черты классов размеров, но таким образом я могу обращаться только к левому или правому ландшафту. Поскольку для новых пользователей также есть вводный экран, который анимирует логотип с экрана запуска, поворот логотипа зависит от того, в каком направлении телефон был положен в альбомную ориентацию.


person sofacoder    schedule 08.06.2018    source источник
comment
Обратитесь к этому сообщению стека: title="как заблокировать ориентацию одного контроллера представления в портретном режиме только в swift"> stackoverflow.com/questions/28938660/   -  person Tibin Thomas    schedule 08.06.2018


Ответы (2)


Для этого есть несколько подходов. Хотя я предпочитаю указывать в Info.plist

<key>UISupportedInterfaceOrientations</key>
<array>
    <string>UIInterfaceOrientationPortrait</string>
</array>

И переопределите это после завершения запуска приложения внутри AppDelegate.

func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
    return [.allButUpsideDown]
}

Источник. ://developer.apple.com/library/archive/technotes/tn2244/_index.html#//apple_ref/doc/uid/DTS40009012-CH1-ALLOWING_YOUR_APP_TO_ROTATE_INTO_PORTRAIT_ORIENTATION_AFTER_LAUNCH

person Sunil    schedule 08.06.2018

Нажмите на навигатор проекта, затем нажмите на цель -> выберите проект> нажмите «Общие» -> «Информация о развертывании», после чего вы увидите вид ниже.

введите здесь описание изображения

проверьте здесь ориентацию устройства, которую вы проверяли во время создания проекта, и отметьте нужную ориентацию. Это будет работать.

ИЛИ

вы можете использовать приведенный ниже код в ViewDidLoad:

NotificationCenter.default.addObserver(self, selector: #selector(orientationChanged), name:  Notification.Name("UIDeviceOrientationDidChangeNotification"), object: nil)

Затем создайте одну функцию, как показано ниже.

@objc func orientationChanged() {

    if(UIDeviceOrientationIsLandscape(UIDevice.current.orientation)){

        print("landscape")
    }

    if(UIDeviceOrientationIsPortrait(UIDevice.current.orientation)){

        print("Portrait")
    }

}
person Priyanka Patil    schedule 08.06.2018
comment
viedDidLoad не вызывается в LaunchScreen VC, и предоставление пользовательского класса также невозможно. Приложение не работает, когда ОС представляет раскадровку - person sofacoder; 08.06.2018
comment
Перевод приложения в портретный режим не работает, так как тогда у вас не может быть контроллера просмотра, поддерживающего альбомную ориентацию. - person sofacoder; 08.06.2018