Блокировка альбомной ориентации не работает при попытке открыть фотогалерею Swift

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

extension UIImagePickerController
{
    public override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
        return .Landscape
    }
    override public func shouldAutorotate() -> Bool { return false }
}

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

terminating with uncaught exception of type NSException

person zach2161    schedule 04.10.2016    source источник
comment
Вызывает ли это сбой? или просто предупреждение в отладчике?   -  person Saleh Sultan    schedule 04.10.2016
comment
Это вызывает полный сбой всякий раз, когда я пытаюсь открыть фотогалерею @AKMSalehSultan.   -  person zach2161    schedule 05.10.2016
comment
Хорошо, дай час. Позвольте мне вернуться к вам в ближайшее время.   -  person Saleh Sultan    schedule 05.10.2016


Ответы (1)


Он абсолютно поддерживает ландшафтный режим. Поместите это расширение куда-нибудь. Лучше всего в файле с именем UIImagePickerController+SupportedOrientations.swift

extension UIImagePickerController
{
    public override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
        return .Landscape
    }
}

Это делает все UIImagePickerControllers в ландшафте вашего приложения. Вы также можете подклассировать его и переопределить этот метод, чтобы сделать ландшафтным только подкласс:

class LandscapePickerController: UIImagePickerController
{
    public override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
        return .Landscape
    }
}

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

return [.Landscape]

person Saleh Sultan    schedule 05.10.2016
comment
-1 Это решение является копией ответа, приведенного в: Используйте UIImagePickerController в ландшафтном режиме в Swift 2.0 (stackoverflow.com/questions/33058691/) - person David; 28.02.2017