我一直在寻找答案,但无法想出任何答案。显然,iPhone SDK 3.0使UIImagePickerController可以横向模式显示 - 但我找不到任何允许这种方法的方法。我认为如果应用程序默认处于横向状态,它会自动调整图像控制器,但这对我不起作用。
感谢您的帮助!
答案 0 :(得分:15)
无需子类;只需覆盖modalPresentationStyle
属性。
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.modalPresentationStyle = UIModalPresentationFormSheet;
[viewController presentViewController:picker animated:YES completion:NULL];
答案 1 :(得分:13)
我没有检查这是否违法,但它对我有用。 如果你想让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];
}
答案 2 :(得分:8)
如果您只是需要摆脱警告,请尝试
@interface UIDevice ()
-(void)setOrientation:(UIDeviceOrientation)orientation;
@end
答案 3 :(得分:3)
我在横向模式下开发了一个UIImagePicker类。适用于我开发的应用程序:希望它也适用于您:
GitHub:https://github.com/imaginaryunit/iOSLandscapeThreadedImagePicker.git
答案 4 :(得分:2)
我也有一个使用UIImagePickerController的全景应用程序。请注意,如果您在横向模式下调用UIImagePickerController,则Apple Review Team可能会拒绝您的应用。
我设计了一个围绕这个问题的简单工作,它使用了shouldAutoRotate委托。 Apple批准这种方法用于全景应用程序。
有关详细信息和可下载的完整项目源代码,请参阅here。
答案 5 :(得分:2)
制作UINavigationController类别并添加此方法
- (BOOL)shouldAutorotate
{
return NO;
}
答案 6 :(得分:2)
子类UIImagePickerController
并覆盖modalPresentationStyle
,如下所示:
- (UIModalPresentationStyle)modalPresentationStyle
{
if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
return UIModalPresentationFormSheet;
}
return [super modalPresentationStyle];
}
图像选择器现在是一个表单,不再是全屏模式,但它在横向模式下看起来很好。 这应该完全适用于商店。
这适用于画廊,不适合拍照。
答案 7 :(得分:0)
我解决了这个问题如下:每次改变方向后,我都会简单地重新创建选择器。试试这个。不同的是太歪了...
答案 8 :(得分:0)
我正在开发一个尽力在横向模式下工作的课程。 在GitHub上查看:RACameraController