UIImagePickerController в альбомной ориентации - PullRequest
23 голосов
/ 18 января 2010

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

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

Ответы [ 9 ]

15 голосов
/ 23 сентября 2014

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

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.modalPresentationStyle = UIModalPresentationFormSheet;
    [viewController presentViewController:picker animated:YES completion:NULL];
13 голосов
/ 27 января 2010

Я не проверял, является ли это незаконным, но у меня это сработало. Если вы хотите, чтобы 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];

}
8 голосов
/ 12 апреля 2011

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

@interface UIDevice ()
    -(void)setOrientation:(UIDeviceOrientation)orientation;
@end
3 голосов
/ 27 февраля 2012

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

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

2 голосов
/ 28 мая 2014

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

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

    return [super modalPresentationStyle];
}

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

Это работает для галереи, а не для фотографирования.

2 голосов
/ 15 мая 2013

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

- (BOOL)shouldAutorotate
{
    return NO;
}
2 голосов
/ 17 января 2011

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

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

См. здесь для получения подробной информации и загружаемого полного исходного кода проекта.

0 голосов
/ 09 октября 2013

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

0 голосов
/ 29 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...