4

デバイスを 6.1 にアップデートして以来、UIImagePickerController を表示しようとするとクラッシュします。私は縦向きのみを使用します。

クラッシュ:

理由: *キャッチされない例外 'UIApplicationInvalidInterfaceOrientation' が原因でアプリを終了しています。

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;
}
4

1 に答える 1

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

もちろん、これを適切に変更することもできます-自動回転させたり、サポートされている複数の向きを返すなど.

于 2013-03-20T13:25:03.110 に答える