Landscape中的UIImagePickerController

时间:2010-01-18 03:03:15

标签: iphone cocoa-touch image uiimagepickercontroller landscape

我一直在寻找答案,但无法想出任何答案。显然,iPhone SDK 3.0使UIImagePickerController可以横向模式显示 - 但我找不到任何允许这种方法的方法。我认为如果应用程序默认处于横向状态,它会自动调整图像控制器,但这对我不起作用。

感谢您的帮助!

9 个答案:

答案 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