在ios应用程序中以纵向模式锁定UIImagePickerController

时间:2012-01-20 11:05:37

标签: ios uiimagepickercontroller portrait

在我的IOS应用程序中,当我打开相机时,我在相机视图上放置了一个图像。它在纵向模式下看起来很不错。但当它改为横向模式时,它看起来有些奇怪。所以我想在纵向模式下锁定UIImagePickerController

以下是我的ui图像选择器控制器代码

UIImagePickerController *imgPkr = [[UIImagePickerController alloc] init];
imgPkr.delegate = self;
imgPkr.sourceType = UIImagePickerControllerSourceTypeCamera;

如何以纵向模式锁定....

8 个答案:

答案 0 :(得分:3)

或者,你可以继承UIImagePickerController:

创建一个新的UIImagePickerController类,只需将这些行添加到它。

- (BOOL)shouldAutorotate{
return NO;
}

将其导入使用相机的类,而不是使用默认的UIImagePickerController,使用您创建的类。

您的相机本身应停止自动旋转。

答案 1 :(得分:2)

这不是最好的解决方案,但它有效:

AppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
[appDelegate.window addSubview:cameraOverlay];
imgPicker.cameraOverlayView = appDelegate.window.superview;

背景上的相机仍在旋转,但您的叠加视图不会旋转。 希望它适合你

答案 2 :(得分:2)

对我有用的唯一解决方案是类别,但我也必须添加另一种方法:

#import "UIImagePickerController+NoRotate.h"

@implementation UIImagePickerController (NoRotate)

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}
@end

干杯!

答案 3 :(得分:1)

您不必“在纵向模式下锁定UIImagePicker控制器”。 正如你所说“当它改为横向模式时,看起来有点奇怪” 其实我不知道你为什么说它看起来很奇怪。 但是,这是我对UIImagePicker视图的体验在横向模式下看起来很奇怪。 那是: 当AViewController作为根视图控制器时。 BViewController的视图将子视图添加到AViewController的视图中。 和BViewController中的presentModalViewController:UIImagePickerController。 在横向模式下,UIImagePicker视图看起来很奇怪。

此问题的解决方案是将UIImagePickerController设置为presentModelViewController之前的根视图控制器。 下面的源代码显示了详细信息:

- (void) onCameraButtonTapped:(UIBarButtonItem *)buttonItem
{   
    //backupRootController it's use as a backup, it will recover after close the image picker controller.
    self.backupRootController = [[UIApplication sharedApplication] keyWindow].rootViewController;

    UIImagePickerController * imageController = [[UIImagePickerController alloc] init];
    imageController.sourceType = UIImagePickerControllerSourceTypeCamera;
    imageController.delegate = self;
    ....
    [[[UIApplication sharedApplication] keyWindow] setRootViewController:imageController];
    [self presentModalViewController:imageController animated:YES];
    [imageController release];
}


- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    [[[UIApplication sharedApplication] keyWindow]  setRootViewController:self.backupRootController];
    ....
}

我希望这个解决方案可以在将来帮助其他人。 --Goman

答案 4 :(得分:0)

只需在视图控制器中编写此代码

即可
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations.
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

答案 5 :(得分:0)

UIImagePickerController上添加一个类别并覆盖它的shouldAutoRotateToInterfaceOrientation方法,如下所示:

@implementation UIImagePickerController (NoRotate)

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end

答案 6 :(得分:0)

-(BOOL)shouldAutorotate {
return NO;}

在视图控制器中尝试此操作。这对我有用。 注意:这适用于ios6.0及以上版本

答案 7 :(得分:0)

不需要创建子类,只需为uiimagepickercontroller创建一个类别并在其上放置该行 - (BOOL)shouldAutorotate { 返回NO; }