我试图检测UIImagePickerController中的方向更改(它继承自UINavigationController:UIViewController:UIResponder:NSObject),我尝试覆盖UIViewController中的方法- (BOOL)shouldAutorotateToInterfaceOrientation (UIInterfaceOrientation)interfaceOrientation
,但没有成功......
任何提示?
提前致谢...
答案 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属性指定自定义视图,并使用该视图显示其他信息或管理相机界面与代码之间的交互。