UIImagePickerController в ландшафте
Я искал ответ на этот вопрос, но ничего не могу придумать. По-видимому, iPhone SDK 3.0 позволил отобразить UIImagePickerController в ландшафтном режиме, но я не нахожу никакого метода, который позволит это. Я думаю, что если приложение по умолчанию по умолчанию, оно автоматически настраивает контроллер изображения, но это не работает для меня.
Спасибо за любую помощь!
Ответы
Ответ 1
Я не проверял, является ли это незаконным, но это сработало для меня.
Если вы хотите, чтобы 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];
}
Ответ 2
Нет необходимости в подклассе; просто переопределите свойство modalPresentationStyle
.
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.modalPresentationStyle = UIModalPresentationFormSheet;
[viewController presentViewController:picker animated:YES completion:NULL];
Ответ 3
Если вам просто нужно избавиться от предупреждения, попробуйте
@interface UIDevice ()
-(void)setOrientation:(UIDeviceOrientation)orientation;
@end
Ответ 4
В ландшафтном режиме я разработал класс UIImagePicker. Отлично подходит для приложений, которые я разработал: надеюсь, что это сработает и для вас:
GitHub: https://github.com/imaginaryunit/iOSLandscapeThreadedImagePicker.git
Ответ 5
У меня есть все-ландшафтное приложение, использующее UIImagePickerController. Обратите внимание, что если вы вызываете UIImagePickerController в ландшафтном режиме, ваше приложение может быть отклонено командой Apple Review.
Я разработал простую работу вокруг этой проблемы, которая использует делегат shouldAutoRotate. Apple одобряет этот метод для полностью ландшафтного приложения.
См. здесь для получения подробной информации и загружаемого полного исходного кода проекта.
Ответ 6
Сделайте категорию UINavigationController и добавьте этот метод
- (BOOL)shouldAutorotate
{
return NO;
}
Ответ 7
Подкласс UIImagePickerController
и переопределить modalPresentationStyle
следующим образом:
- (UIModalPresentationStyle)modalPresentationStyle
{
if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
return UIModalPresentationFormSheet;
}
return [super modalPresentationStyle];
}
Сборщик изображений теперь является форматом и больше не работает в полноэкранном режиме, но он выглядит хорошо в ландшафтном режиме.
Это должно быть полностью безопасным для магазина.
Это работает для галереи, а не для съемки.
Ответ 8
Я решил эту проблему следующим образом: после каждого изменения ориентации я просто заново создаю сборщик. Попробуй это. Иными словами, слишком криво...
Ответ 9
Я разрабатываю класс, который изо всех сил пытается работать в ландшафтном режиме.
Проверьте это на GitHub: RACameraController