Подтвердить что ты не робот

UIImagePickerController в ландшафте

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

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

4b9b3361

Ответ 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