AVCaptureVideoPreviewLayer с возможностью записи в альбомном режиме с помощью Quicktime

Итак, в настоящее время у меня есть приложение для камеры. У меня есть так, что он работает только в портретном режиме, но вы все равно можете записывать видео и фотографировать в ландшафтном режиме. Для этого я использую следующий код:

videoConnection?.videoOrientation = self.orientation()

Однако, поскольку приложение не регистрирует ландшафтный режим, вы не можете записывать экран через quicktime в пейзаже (он остается в портрете) (quicktime > file > record movie > выбрать имя устройства)

Есть ли способ исправить это? Мне не нужно что-то менять об устройстве для поддержки ландшафта, я просто хочу, чтобы уметь записывать его таким образом в быстром режиме, но ничего не нужно менять в пользовательском интерфейсе.

Ответ 1

Вы можете установить вызов beginGeneratingDeviceOrientationNotifications для UIDevice и подписаться на UIDeviceOrientationDidChangeNotification. Впоследствии вы можете использовать свойство ориентации UIDevice в своем коде.

Ссылка документация Apple для UIDevice для подробностей.

Ответ 2

Попробуйте установить вызов beginGeneratingDeviceOrientationNotifications для UIDevice и подпишитесь на UIDeviceOrientationDidChangeNotification.

Использовать пропорцию рутинизации UIDevice.

Ответ 3

Что вам нужно сделать, так это обнаружить изменение ориентации:

Посмотрите эту документацию на яблоко Ссылка на класс UIDevice, для получения дополнительной информации об этом.

Вот пример реализации в Obj-C && & Swift

Ответ 4

Вот что я сделал! Использование отмеченного ответа.

func orientationChanged() {
    var orient = UIDevice.currentDevice().orientation

    if orient == UIDeviceOrientation.Portrait {
        print("PORT")
                UIApplication.sharedApplication().statusBarOrientation = UIInterfaceOrientation.Portrait
    } else if orient == UIDeviceOrientation.LandscapeLeft {
        print("OR ARE YOU CRASHING")
                UIApplication.sharedApplication().statusBarOrientation = UIInterfaceOrientation.LandscapeRight
    } else if orient == UIDeviceOrientation.LandscapeRight {
        print("WHY YOU CRASHING")
                UIApplication.sharedApplication().statusBarOrientation = UIInterfaceOrientation.LandscapeLeft
    } else if orient == UIDeviceOrientation.PortraitUpsideDown {
                UIApplication.sharedApplication().statusBarOrientation = UIInterfaceOrientation.PortraitUpsideDown
    }