UiImagePickerController na paisagem
-
21-09-2019 - |
Pergunta
Eu tenho procurado uma resposta para isso, mas não posso inventar nada. Aparentemente, o iPhone SDK 3.0 possibilitou que o UIImagePickerController possa ser exibido no modo paisagem - mas não estou encontrando nenhum método que permitirá isso. Eu pensaria que, se o aplicativo estivesse no cenário por padrão, ajustaria automaticamente o controlador de imagem, mas isso não está funcionando para mim.
Obrigado por qualquer ajuda!
Solução
Não verifiquei se isso é ilegal, mas funcionou para mim. Se você deseja que o UiImagePickerController inicie (e fique) no Código de Orientação da 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];
}
Outras dicas
Não há necessidade de subclasse; simplesmente substituir o modalPresentationStyle
propriedade.
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
Desenvolvi uma classe UIImagePicker no modo paisagem. Funciona muito bem para aplicações que desenvolvi: espero que funcione para você também:
Github: https://github.com/imaginaryunit/ioslandscapethreadEdImagePicker.git
Eu também tenho um aplicativo de paisagem toda usando uiImagePickerController. Observe que, se você ligar para o UiImagePickerController no modo paisagem, seu aplicativo poderá ser rejeitado pela equipe da Apple Review.
Eu desenvolvi um trabalho simples em torno desse problema que faz uso o delegado deve. A Apple aprova esse método para um aplicativo de paisagem toda.
Ver aqui Para os detalhes e o código -fonte do projeto completo para download.
Fazer uma categoria de UinavigationController e adicione este método
- (BOOL)shouldAutorotate
{
return NO;
}
Subclasse UIImagePickerController
e substituir modalPresentationStyle
do seguinte modo:
- (UIModalPresentationStyle)modalPresentationStyle
{
if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
return UIModalPresentationFormSheet;
}
return [super modalPresentationStyle];
}
O picker de imagem é uma folha de formulário agora e não está mais no modo de tela cheia, mas fica bem no modo de paisagem. Isso deve ser totalmente seguro.
Isso funciona para a galeria, não para tirar fotos.
Resolvi esse problema da seguinte forma: Após cada alteração na orientação, eu simples recrie o selecionador. Tente isso. Diferentemente é muito torto ...
Estou desenvolvendo uma classe que tenta o melhor para trabalhar no modo paisagem. Confira no Github: Racameracontroller