6

以下の回答はiOS6では機能しないため、まだ回答が必要です。

私のアプリケーションは、ポートレート モードでのみ有効になっています。

ただし、UIImagePickerController をサブビューとして内部に埋め込み、デバイスを回転させると、上部と下部のバーは同じ場所に留まりますが、UIImagePickerController は回転します。

回転しないようにするにはどうすればよいですか?

これはコードです:

    [self.view.window addSubview:self.imagePickerController.view];
    self.imagePickerController.showsCameraControls = NO; 
    self.imagePickerController.view.frame = CGRectMake(0, 90, 320, 320);
    self.imagePickerController.allowsEditing = NO;

編集済み

shouldAutorotateが呼び出されていないiOS6を使用しています

4

4 に答える 4

12

このUIImagePickerControllerカテゴリをクラスに追加してください。

@interface UIImagePickerController(Nonrotating)
- (BOOL)shouldAutorotate;
@end

@implementation UIImagePickerController(Nonrotating)

- (BOOL)shouldAutorotate {

  return NO;
}

@end
于 2013-01-21T11:16:12.943 に答える
2

コントローラーに以下を含めてください。これは機能します。のカテゴリを作成しているだけですUIImagePickerController

@interface UIImagePickerController (private)

- (BOOL)shouldAutorotate;
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation;
- (NSUInteger)supportedInterfaceOrientations;
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation;

@end


@implementation UIImagePickerController (Private)

- (NSUInteger)supportedInterfaceOrientations {

    return UIInterfaceOrientationMaskPortrait;
}

- (BOOL)shouldAutorotate {

    return UIInterfaceOrientationMaskPortrait;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationPortrait;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{  
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
@end
于 2013-01-21T11:27:58.750 に答える
0

1 つの可能性は、

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation;

の方法UIImagePickerController。これが最善の可能性かどうかはわかりませんが、うまくいくでしょう。

したがって、UIImagePickerController を縦向きに回転させたいだけの場合は、次のコードを使用します

@interface PortraitUIImagePickerController : UIImagePickerController

@end

そして、実装は次のようになります

@implementation PortraitUIImagePickerController

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    return UIInterfaceOrientationIsPortrait(toInterfaceOrientation);
}

@end
于 2013-01-21T11:18:46.287 に答える
0

最も投票された回答のカテゴリは機能しますが、カテゴリの使用は推奨されないため、UIImagePickerController のサブクラスを作成して使用することもできます。

UIImagePickerController の回転を避けたい場合は、次のクラスを追加します

UINonRotatableImagePickerController.h

@interface UINonRotatableImagePickerController : UIImagePickerController

@end

UINonRotatableImagePickerController.m

@implementation UINonRotatableImagePickerController

- (BOOL)shouldAutorotate
{
    return NO;
}

@end

UILandscapeImagePickerController を使用するには、ストーリーボードの UIImagePicker クラスを変更する必要があります。コードで割り当てる場合は、変更する必要があります。

UIImagePickerController *picker = [[UIImagePickerController alloc] init];

UIImagePickerController *picker = [[UINonRotatableImagePickerController alloc] init];

コードに UINonRotatableImagePickerController.h を含めます。

于 2014-04-03T10:49:32.797 に答える