0

イメージピッカーコントローラーをモーダルに追加するVCがあり、picが選択されると同じVCに戻ります。PickerController 経由で画像を取得した後、画像を画面に追加します。写真が横向きの場合は横向きに、写真が縦向きの場合は縦向きにデバイスを自動的に変更します。

デバイスを強制的に横向きにするために、これらの両方のアプローチを試みましたが失敗しました

1. 

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft];

2. 
[UIViewController attemptRotationToDeviceOrientation]; 

-(NSUInteger)supportedInterfaceOrientations
{

if (!isPortrait) //isPortrait is false when pic is landscape
    return UIInterfaceOrientationMaskLandscape;

}

または、画像用に別の vc をインスタンス化するのが最善かどうか疑問に思っています。この質問の後、私はこれまでそれを避けてきました

4

1 に答える 1

0

私の推測では、を提示する ViewController[[UIApplication sharedApplication] setStatusBarOrientation:のメソッド内で呼び出す必要があります。viewWillAppear:UIImagePickerController

そのためには、最初に画像の向きを知る必要があります。次のようなことができます。

- (BOOL)shouldAutorotate {
    return NO;
}

- (void) viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    if(myOrientation>0)
        [UIApplication sharedApplication].statusBarOrientation = myOrientation;
}

- (void)presentPicker {
    UIImagePickerController* imgPicker = [[UIImagePickerController alloc] init];
    imgPicker.delegate = self;
    [self presentViewController:imgPicker animated:YES completion:nil];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    UIImage* image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

    if(image.size.width>image.size.height)
        myOrientation = UIInterfaceOrientationLandscapeLeft;
    else
        myOrientation = UIInterfaceOrientationPortrait;

    [picker dismissViewControllerAnimated:YES completion:nil];
}

また、初期およびサポートされているインターフェイスの向きを plist に設定することを忘れないでください (サポートされている向きの最初のものは、初期の向きと同じでなければなりません)。

于 2013-04-20T09:47:44.337 に答える