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!

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top