私はこれに対する答えを探していましたが、何も思いつきません。どうやら、iPhone SDK 3.0ではUIImagePickerControllerを横向きモードで表示できるようになりましたが、これを可能にするメソッドは見つかりませんでした。アプリケーションがデフォルトで横向きになっていると、イメージコントローラーが自動的に調整されると思いますが、それは私にはうまくいきません。
助けてくれてありがとう!
これが違法かどうかは確認していませんが、うまくいきました。 UIImagePickerControllerを横向きの方向コードで開始(および維持)する場合:
//Initialize picker
UIImagePickerController * picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
//set Device to Landscape. This will give you a warning. I ignored it.
//warning: 'UIDevice' may not respond to '-setOrientation:'
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
//Set Notifications so that when user rotates phone, the orientation is reset to landscape.
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
//Refer to the method didRotate:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didRotate:)
name:@"UIDeviceOrientationDidChangeNotification" object:nil];
//Set the picker source as the camera
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
//Bring in the picker view
[self presentModalViewController:picker animated:YES];
メソッドdidRotate:
- (void) didRotate:(NSNotification *)notification
{
//Maintain the camera in Landscape orientation
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
}
サブクラス化する必要はありません。 modalPresentationStyle
プロパティをオーバーライドするだけです。
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.modalPresentationStyle = UIModalPresentationFormSheet;
[viewController presentViewController:picker animated:YES completion:NULL];
警告を取り除く必要がある場合は、
@interface UIDevice ()
-(void)setOrientation:(UIDeviceOrientation)orientation;
@end
ランドスケープモードでUIImagePickerクラスを開発しました。私が開発したアプリケーションに最適です。あなたにも機能することを願っています。
GitHub: https://github.com/imaginaryunit/iOSLandscapeThreadedImagePicker.git
UIImagePickerControllerを使用した全風景アプリもあります。ランドスケープモードでUIImagePickerControllerを呼び出すと、アプリがAppleレビューチームによって拒否される可能性があることに注意してください。
この問題を回避する簡単な回避策を考案しました。これは、shouldAutoRotateデリゲートを利用します。 Appleは、すべてのランドスケープアプリに対してこのメソッドを承認します。
詳細およびダウンロード可能な完全なプロジェクトソースコードについては、 ここ を参照してください。
INavigationController のカテゴリを作成し、このメソッドを追加します
- (BOOL)shouldAutorotate
{
return NO;
}
UIImagePickerController
をサブクラス化し、modalPresentationStyle
を次のようにオーバーライドします。
- (UIModalPresentationStyle)modalPresentationStyle
{
if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
return UIModalPresentationFormSheet;
}
return [super modalPresentationStyle];
}
イメージピッカーはフォームシートになり、フルスクリーンモードではなくなりましたが、ランドスケープモードでは見栄えがします。これは完全にアプリストアセーフである必要があります。
これは、写真を撮るためではなく、ギャラリーのために機能します。
この問題を次のように解決しました。向きを変えるたびに、ピッカーを簡単に再作成します。これを試して。違って曲がりすぎています...
ランドスケープモードで動作するように最善を尽くすクラスを開発しています。 GitHubでチェックしてください: RACameraController