2

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

有小费吗?

提前致谢...

4

3 回答 3

4

不支持子类化 UIImagePickerController!

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

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

于 2010-01-13T16:57:53.933 回答
2

在这里回答为时已晚,但我正在扩展@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(替代UIAccelerometeriOS < 6.0)来检测设备方向是否被锁定。UIAccelerometer 这是http://blog.sallarp.com/iphone-accelerometer-device-orientation/的博客,这是针对CoreMotion https://github.com/tastyone/MotionOrientation的博客,您必须使用一些逻辑来检查这一点。

祝你好运!

于 2014-07-04T11:19:43.973 回答
0

来自官方 UIImagePickerController 文档:

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

于 2010-01-13T16:57:51.843 回答