0

Я нахожу много статей, когда это касается Google, но ни один из них, похоже, действительно не охватывает этот случай, поэтому я постараюсь быть очень конкретным. У меня есть приложение для пейзажа только для iPhone и iPad. Я пытаюсь дать пользователю возможность выбрать изображение из своего альбома со следующим кодом:UIImagePickerController, чтобы выбрать из альбома в ландшафте только приложение для iPhone/iPad

let imagePicker = UIImagePickerController() 
imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary 
imagePicker.mediaTypes = [kUTTypeImage as String] 
imagePicker.modalPresentationStyle = UIModalPresentationStyle.Popover 
imagePicker.allowsEditing = false 
context.presentViewController(imagePicker, animated: true, completion: { 
    () -> Void in 

}) 

Я использую стиль презентации поповер потому Apple mentions что на IPad это, как он должен быть установлен в противном случае будет сгенерировано исключение :

таблица показывает, что на IPad, если указать тип источника PhotoLibrary или savedPhotosAlbum, вы должны представить сборщик изображений с помощью контроллера поповера (чтобы узнать, как это сделать, см UIPopoverPresentationController). Если вы попытаетесь представить изображение выборщик по умолчанию (полноэкранный) для выбора среди сохраненных изображений и фильмов, система вызывает исключение.

Это терпит неудачу с ниже ошибки

*** Terminating app due to uncaught exception 'UIApplicationInvalidInterfaceOrientation', reason: 'Supported orientations has no common orientation with the application, and [PUUIAlbumListViewController shouldAutorotate] is returning YES' 

То, что я пытался:

  • Подкласс UIImagePickerController и UIViewController для поддержки альбомной ориентации установите shouldAutorotate ложь, но я думаю, что это бесполезно поскольку здесь не работает класс PUUIAlbumListViewController
  • Установите мое приложение для поддержки Portrait, это работает, но затем все приложение aut otorates с телефоном, и это не должно произойти
  • использовать промежуточный UIPopoverPresentationController, но никогда не получал это, чтобы показать что-нибудь

UPDATE не ответ, но, как сумасшедший, как это может показаться, я не подумайте, что это выполнимо. Спасибо Apple за предоставление современного API, в котором все имеет смысл. Я закончил с использованием DKImagePickerController, делает работу отлично

ответ

0

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

0

Подкласс вашего контроллера навигации и изменения для маски ландшафтной ориентации. А затем покажите с этого контроллера NavigationController свой контроллер Pick Picker.

class CustomNavigation: UINavigationController { 
override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 
override var shouldAutorotate: Bool { 
    return false 
} 
override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
    return UIInterfaceOrientationMask.portrait 
} 

/* 
// MARK: - Navigation 
// In a storyboard-based application, you will often want to do a little preparation before navigation 
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    // Get the new view controller using segue.destinationViewController. 
    // Pass the selected object to the new view controller. 
} 
*/ 


} 
Смежные вопросы