31

私は横向きモードのアプリを作成しておりUIImagePickerController、iPhoneカメラを使用して写真を撮るために使用していますが、横向きモードでも作成したいと考えています。

しかし、Apple のドキュメントが示唆UIImagePickerControllerしているように、横向きはサポートされていません。必要な機能を得るにはどうすればよいですか?

4

9 に答える 9

14

この方法を試してください....

Apple ドキュメントによると、ImagePicker コントローラーは横向きモードでは決して回転しません。ポートレートモードでのみ使用する必要があります。

ImagePicker コントローラーの横向きモードのみを無効にするには、以下のコードに従います。

ViewController.m で:

Image Picker Controller の SubClass(NonRotatingUIImagePickerController) を作る

@interface NonRotatingUIImagePickerController : UIImagePickerController

@end

@implementation NonRotatingUIImagePickerController
// Disable Landscape mode.
- (BOOL)shouldAutorotate
{
    return NO;
}
@end

次のように使用します

UIImagePickerController* picker = [[NonRotatingUIImagePickerController alloc] init];
        picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        picker.delegate = self; 
  etc.... Just as Default ImagePicker Controller

これは私のために働いています & 何か問題があれば教えてください.

于 2013-10-15T06:09:04.413 に答える
6

すべてのインターフェイスの向きで回転をサポートするバージョンを次に示します。

/// Not fully supported by Apple, but works as of iOS 11.
class RotatableUIImagePickerController: UIImagePickerController {

  override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return .all
  }
}

このようにして、ユーザーがデバイスを回転させると、現在の向きをサポートするようにピッカー コントローラーが更新されます。通常は UIImagePickerController をインスタンス化するだけです。

向きのサブセットのみをサポートする場合は、別の値を返すことができます。

于 2017-10-26T20:09:05.823 に答える
5

UIImagePickerControllerハックせずにランドスケープ モードで使用する正しい方法は、UIPopoverController

- (void)showPicker:(id)sender
{
    UIButton *button = (UIButton *)sender;
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.allowsEditing = YES;
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

    _popover = [[UIPopoverController alloc] initWithContentViewController:picker];
    [_popover presentPopoverFromRect:button.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
于 2014-07-28T11:48:08.850 に答える
2

受け入れられた答えは私にはうまくいきません。modalPresentationStyle を UIImagePickerController に追加して、機能させる必要もありました。

UIImagePickerController *pickerController = [[UIImagePickerController alloc] init];
pickerController.modalPresentationStyle = UIModalPresentationCurrentContext; //this will allow the picker to be presented in landscape
pickerController.delegate = self;
pickerController.allowsEditing = YES;
pickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:pickerController animated:YES completion:nil];

そしてもちろん、これをピッカーを表示するコントローラーに入れることを忘れないでください:

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape; //this will force landscape
}

ただし、Apple のドキュメントによると、このピッカーを横向きモードで表示することはサポートされていないため、注意が必要です。

于 2016-12-02T08:30:14.003 に答える