自从我的设备更新到6.1后,我在尝试显示UIImagePickerController时遇到了崩溃。我只使用纵向方向。
崩溃:
原因: * 由于未捕获的异常'UIApplicationInvalidInterfaceOrientation'而终止应用,原因:'preferredInterfaceOrientationForPresentation必须返回支持的接口方向!'
这是我调用UIImagePickerController的地方:
if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
//The device cannot make pictures
[PMAlertDialog showWithTitle:NSLocalizedString(@"incompatibleDeviceDialogTitle", nil) message:NSLocalizedString(@"incompatibleDeviceDialogMessage", nil) andButtonTitle:NSLocalizedString(@"okButtonTitle", nil)];
return;
}
if (_imagePicker == nil)
{
_imagePicker = [[UIImagePickerController alloc] init];
_imagePicker.delegate = self;
}
_imagePicker.allowsEditing = NO;
_imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
_imagePicker.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
[self presentModalViewController:_imagePicker animated:YES];
我已将这些方法添加到添加了UIImagePickerController的视图控制器中:
-(BOOL)shouldAutorotate
{
return NO;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationPortrait;
}
答案 0 :(得分:2)
为了解决这个问题,我按如下方式制作了一个类别:
我创建了一个新的objective-c类,“UIImagePickerController + NonRotating”
在头文件(UIImagePickerController + NonRotating.h)中:
#import <Foundation/Foundation.h>
@interface UIImagePickerController (NonRotating)
- (BOOL)shouldAutorotate;
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation;
@end
在实现文件(UIImagePickerController + NonRotating.m)中:
#import "UIImagePickerController+NonRotating.h"
@implementation UIImagePickerController (NonRotating)
- (BOOL)shouldAutorotate {
return NO;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationPortrait;
}
@end
当然,您可以根据自己的需要修改它 - 使其自动旋转并返回多个支持的方向等。