我已经阅读了几乎每个关于我的问题的帖子,但没有一个解决方案似乎适用于我的应用程序。
因此,我使用从视图控制器以模态方式呈现的自定义相机视图(带有工具栏上的按钮和叠加层)。我的应用程序仅支持左右横向的方向。我想在相机视图出现时停止自动旋转。我已将自动旋转所需的所有方法放在我的视图控制器和我的应用程序委托上。我也检查了我的plist文件,支持的旋转是正确的。但是当我旋转设备时,我的相机视图会一直旋转到任何旋转(纵向和横向),从而导致叠加层和工具栏的位置不正确。我也无法检查摄像机视图的方向,因为我尝试将NSLog放在shouldAutoRotate方法上,但它根本没有被调用。
那么如何检查自定义相机视图的旋转?我怎么能强迫它不旋转并保持静止?
如果需要我的代码,我会在这里发布。如果有人可以帮助我,我会非常感激它,因为它现在让我很沮丧。
谢谢。干杯。
答案 0 :(得分:2)
创建一个新的“UIImagePickerController”类,并在给定的.m文件中实现旋转委托,
// For lower iOS versions
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return ((toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) || ((toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)));
}
// For iOS version 6.0 and above
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return (UIInterfaceOrientationMaskLandscape);
}
创建一个让我们说MyImagePickerController而不是UIImagePickerController的实例,然后呈现它。这将有效:)
答案 1 :(得分:0)
为 UINavigationController
创建一个类别@interface UINavigationController(autoRotation)
-(BOOL)shouldAutoRotate;
@end
@implementation UINavigationController
-(BOOL)shouldAutoRotate{
return [[self.viewControllers lastobject] shouldAutoRoatate];
}
-(NSUInteger)supportedInterfaceOrientations {
return [[self.viewControllers lastobject] supportedInterfaceOrientations];
}
@end
在相应的视图控制器中实现这两个方法 并返回你想要的方向....
答案 2 :(得分:0)
xcode - >文件 - >左侧窗格中的新文件选择cocotouch选择objective-c类别 - > next 从下拉列表中选择 UIImageImagePickerController 上的名称 Picker 类别
@interface UIImagePickerController(picker)
- (BOOL)shouldAutoRotate; - (NSUInteger)supportedInterfaceOrientations;
@end
@implementation UIImagePickerController(picker)
- (BOOL)shouldAutoRotate {
return yourOrientation;
}
- (NSUInteger)supportedInterfaceOrientations {
return yourInteger;
}
@end
在此之后,当您的设备的方向发生变化时,方法shouldAutoRotate将从您的UINavigationController类别调用,此时您必须查明是否显示了cameraview,如果是,那么您必须调用Picker的shouldAutoRotate
请参阅以下代码
视图控制器中的是shouldAutoRotate
- (BOOL)shouldAutoRotate {
if([self presentingViewController])// Camera is present
return [instanceOfUIImagePickerController shouldAutoRotate];
return yourOrientaionNeededForThisVC;
}