UIImagePickerController na paisagem

Eu tenho procurado por uma resposta para isso, mas não consigo encontrar nada. Aparentemente, o iPhone SDK 3.0 tornou possível que o UIImagePickerController possa ser exibido no modo paisagem – mas não estou encontrando nenhum método que permita isso. Eu pensaria que, se o aplicativo estivesse no modo paisagem por padrão, ele ajustaria automaticamente o controlador de imagem, mas isso não está funcionando para mim.

Obrigado por qualquer ajuda!

Eu não verifiquei se isso é ilegal, mas funcionou para mim. Se você quiser que o UIImagePickerController inicie (e permaneça) no código de orientação Paisagem:

//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]; 

O método didRotate:

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

Não há necessidade de subclass; simplesmente substitua a propriedade modalPresentationStyle .

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

Se você só precisa se livrar do aviso tente

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

Eu desenvolvi uma class UIImagePicker no modo paisagem. Funciona muito bem para aplicativos que desenvolvi: espero que funcione para você também:

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

Eu tenho um aplicativo all-landscape usando UIImagePickerController também. Observe que, se você chamar UIImagePickerController no modo Paisagem, seu aplicativo poderá ser rejeitado pela Equipe de revisão da Apple.

Eu criei um trabalho simples em torno desse problema que usa o delegado shouldAutoRotate. A Apple aprova esse método para um aplicativo todo paisagístico.

Veja aqui os detalhes e o código-fonte completo do projeto para download.

Faça uma categoria de UINavigationController e adicione este método

 - (BOOL)shouldAutorotate { return NO; } 

Subclass UIImagePickerController e substitua modalPresentationStyle seguinte maneira:

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

O seletor de imagens é uma folha de formulário agora e não está mais no modo de canvas cheia, mas fica bem no modo paisagem. Isso deve ser totalmente seguro para o app-store.

Isso funciona para a galeria, não para tirar fotos.

Eu resolvi este problema da seguinte forma: após cada mudança de orientação, eu simplesmente recrio o selecionador. Tente isso. Diferentemente é muito torto …

Eu estou desenvolvendo uma class que tenta o seu melhor para trabalhar no modo paisagem. Confira no GitHub: RACameraController