检测UIImagePickerController中的方向更改?

时间:2010-01-13 16:51:30

标签: iphone objective-c camera uipickerviewcontroller

我试图检测UIImagePickerController中的方向更改(它继承自UINavigationController:UIViewController:UIResponder:NSObject),我尝试覆盖UIViewController中的方法- (BOOL)shouldAutorotateToInterfaceOrientation (UIInterfaceOrientation)interfaceOrientation,但没有成功......

任何提示?

提前致谢...

3 个答案:

答案 0 :(得分:4)

不支持子类化UIImagePickerController!

  

此类旨在按原样使用,不支持子类化。

也许你可以注册UIDeviceOrientationDidChangeNotification from UIDevice并使用它?

答案 1 :(得分:2)

现在回答这已经太迟了,但我正在扩大@AdamWoś的答案,

在提交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评论@AdamWoś的回答,

  

如果设备方向已锁定,则不再发布通知。

要处理这种情况,需要实施CoreMotion(替代UIAccelerometer iOS< 6.0)来检测设备方向是否已锁定。以下是UIAccelerometer http://blog.sallarp.com/iphone-accelerometer-device-orientation/的博客,这适用于CoreMotion https://github.com/tastyone/MotionOrientation您必须采取一些逻辑来检查这一点。

祝你好运!

答案 2 :(得分:0)

来自官方UIImagePickerController文档:

  

重要事项: UIImagePickerController类仅支持纵向模式。此类旨在按原样使用,不支持子类化。此类的视图层次结构是私有的,不得修改,但有一个例外。在iPhone OS 3.1及更高版本中,您可以为cameraOverlayView属性指定自定义视图,并使用该视图显示其他信息或管理相机界面与代码之间的交互。