Обнаружить изменение ориентации в UIImagePickerController? - PullRequest
2 голосов
/ 13 января 2010

Я пытаюсь обнаружить изменения ориентации в UIImagePickerController (он наследует от UINavigationController: UIViewController: UIResponder: NSObject), и я попытался переопределить метод - (BOOL)shouldAutorotateToInterfaceOrientation (UIInterfaceOrientation)interfaceOrientation в UIViewController, но безуспешно ...

какие-нибудь советы?

Заранее спасибо ...

Ответы [ 3 ]

4 голосов
/ 13 января 2010

Подкласс UIImagePickerController не поддерживается!

Этот класс предназначен для использования как есть и не поддерживает создание подклассов.

Может быть, вы могли бы зарегистрироваться на UIDeviceOrientationDidChangeNotification с UIDevice и использовать это?

2 голосов
/ 04 июля 2014

Здесь уже слишком поздно, чтобы ответить, но я расширяю ответ @Adam Woś,

Перед предъявлением 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.....");
    }
}

Когда UIImagePickerController получи увольнение, не забудь,

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

Также обратите внимание, что согласно @FelixLam комментарию к ответу @Adam Woś,

если ориентация устройства заблокирована, уведомления больше не публикуются.

Чтобы справиться с этой ситуацией, необходимо реализовать CoreMotion (альтернатива UIAccelerometer iOS <6.0), чтобы определить, заблокирована или нет ориентация устройства. Вот блог для <code>UIAccelerometer http://blog.sallarp.com/iphone-accelerometer-device-orientation/, и это для CoreMotion https://github.com/tastyone/MotionOrientation Вам придется нажать некоторую логику, чтобы проверить это.

Удачи!

0 голосов
/ 13 января 2010

Из официальной документации UIImagePickerController:

Важно: Класс UIImagePickerController поддерживает только портретный режим. Этот класс предназначен для использования как есть и не поддерживает создание подклассов. Иерархия представления для этого класса является частной и не должна изменяться, за одним исключением. В iPhone OS 3.1 и более поздних версиях вы можете назначить собственное представление свойству cameraOverlayView и использовать это представление для представления дополнительной информации или управления взаимодействиями между интерфейсом камеры и вашим кодом.

...