UIImagePickerController в ландшафте

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

Спасибо за любую помощь!

Я не проверял, является ли это незаконным, но это сработало для меня. Если вы хотите, чтобы UIImagePickerController начал (и остался) в коде ландшафтной ориентации:

//Initialize picker UIImagePickerController * picker = [[UIImagePickerController alloc] init]; picker.delegate = self; //set Device to Landscape. This will give you a warning. I ignored it. //warning: 'UIDevice' may not respond to '-setOrientation:' [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight]; //Set Notifications so that when user rotates phone, the orientation is reset to landscape. [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; //Refer to the method didRotate: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:@"UIDeviceOrientationDidChangeNotification" object:nil]; //Set the picker source as the camera picker.sourceType = UIImagePickerControllerSourceTypeCamera; //Bring in the picker view [self presentModalViewController:picker animated:YES]; 

Метод didRotate:

 - (void) didRotate:(NSNotification *)notification { //Maintain the camera in Landscape orientation [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight]; } 

Нет необходимости в подclassе; просто переопределите свойство modalPresentationStyle .

  UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.modalPresentationStyle = UIModalPresentationFormSheet; [viewController presentViewController:picker animated:YES completion:NULL]; 

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

 @interface UIDevice () -(void)setOrientation:(UIDeviceOrientation)orientation; @end 

Я разработал class UIImagePicker в ландшафтном режиме. Отлично подходит для приложений, которые я разработал: надеюсь, что это сработает и для вас:

GitHub: https://github.com/imaginaryunit/iOSLandscapeThreadedImagePicker.git

У меня есть все-ландшафтное приложение, использующее UIImagePickerController. Обратите внимание, что если вы вызываете UIImagePickerController в ландшафтном режиме, ваше приложение может быть отклонено командой Apple Review.

Я разработал простую работу по этой проблеме, которая использует делегат shouldAutoRotate. Apple одобряет этот метод для полностью ландшафтного приложения.

См. Здесь подробности и загружаемый полный исходный код проекта.

Создайте категорию UINavigationController и добавьте этот метод

 - (BOOL)shouldAutorotate { return NO; } 

Подclass UIImagePickerController и переопределить modalPresentationStyle следующим образом:

 - (UIModalPresentationStyle)modalPresentationStyle { if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { return UIModalPresentationFormSheet; } return [super modalPresentationStyle]; } 

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

Это работает для галереи, а не для съемки.

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

Я разрабатываю class, который изо всех сил пытается работать в ландшафтном режиме. Проверьте это на GitHub: RACameraController

Давайте будем гением компьютера.