Detectar mudança de orientação em um UIImagePickerController?

votos
2

Im tentando detectar alterações de orientação em um UIImagePickerController (que herda de UINavigationController: UIViewController: UIResponder: NSObject) e eu tentei substituir o método - (BOOL)shouldAutorotateToInterfaceOrientation (UIInterfaceOrientation)interfaceOrientationno UIViewController, mas sem sucesso ...

alguma dica?

Desde já, obrigado...

Publicado 13/01/2010 em 17:51
fonte usuário
Em outras línguas...                            


3 respostas

votos
4

Subclassing UIImagePickerController não é suportado!

Essa classe se destina a ser usado como está e não suporta subclasses.

Talvez você poderia se inscrever para UIDeviceOrientationDidChangeNotificationpartirUIDevice e usar isso?

Respondeu 13/01/2010 em 17:57
fonte usuário

votos
2

Este é tarde demais para responder aqui, mas estou expandindo resposta @ Adam Woś,

Antes de apresentar UIImagePickerController,

UIImagePickerController *controllerObject = [[UIImagePickerController alloc] init];
...
...
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self  selector:@selector(orientationChanged:)name:UIDeviceOrientationDidChangeNotification  object:nil];
...
...
[self presentViewController:controllerObject animated:YES completion:nil];

- (void)orientationChanged:(NSNotification *)notification{
    [self adjustViewsForOrientation:UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]];
}

- (void) adjustViewsForOrientation:(UIInterfaceOrientation)orientation
{
    if(orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight)
    {
        NSLog(@".....landscape.....");
    }
    else if(orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown)
    {
        NSLog(@".....portrait.....");
    }
}

Quando UIImagePickerControllerse demitir não se esqueça,

[[NSNotificationCenter defaultCenter]removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];
[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];

Observe também que, conforme comentário @FelixLam em resposta @ Adam Woś,

se a orientação do dispositivo é bloqueado em seguida notificações não publicado.

Para lidar com esta situação, uma necessidade de implementar CoreMotion(alternativa UIAccelerometeriOS <6,0) para detectar que a orientação do dispositivo é bloqueado ou não. Aqui está o blog para UIAccelerometer http://blog.sallarp.com/iphone-accelerometer-device-orientation/ e isto é para CoreMotion https://github.com/tastyone/MotionOrientation Você vai ter que chutar alguns lógica para verificar isso.

Boa sorte!

Respondeu 04/07/2014 em 12:19
fonte usuário

votos
0

A partir da documentação oficial UIImagePickerController:

Importante: A classe UIImagePickerController suporta o modo retrato somente. Essa classe se destina a ser usado como está e não suporta subclasses. A hierarquia vista para esta classe é privado e não deve ser modificado, com uma exceção. No iPhone OS 3.1 e posterior, você pode atribuir uma exibição personalizada para a propriedade cameraOverlayView e usar essa visão para apresentar informações adicionais ou gerenciar as interações entre a interface da câmera e seu código.

Respondeu 13/01/2010 em 17:57
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more