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

Posted

技术标签:

【中文标题】在 ios 应用程序中将 UIImagePickerController 锁定为纵向模式【英文标题】:lock UIImagePickerController in Portrait mode in ios app 【发布时间】:2012-01-20 11:05:37 【问题描述】:

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

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

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

如何将其锁定为纵向模式......

【问题讨论】:

【参考方案1】:

或者,您可以继承 UIImagePickerController:

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

- (BOOL)shouldAutorotate
return NO;

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

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

【讨论】:

【参考方案2】:

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

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

背景上的相机仍在旋转,但您的叠加视图不会。 希望对你有用

【讨论】:

【参考方案3】:

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

#import "UIImagePickerController+NoRotate.h"

@implementation UIImagePickerController (NoRotate)

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

    return (interfaceOrientation == UIInterfaceOrientationPortrait);


- (NSUInteger)supportedInterfaceOrientations

    return UIInterfaceOrientationMaskPortrait;

@end

干杯!

【讨论】:

【参考方案4】:

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

解决这个问题的方法是在presentModelViewController之前设置UIImagePickerController为根视图控制器。 下面的源代码显示了细节:

- (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];
    ....

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

【讨论】:

【参考方案5】:

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

@implementation UIImagePickerController (NoRotate)

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

    return (interfaceOrientation == UIInterfaceOrientationPortrait);


@end

【讨论】:

我创建了两个文件:UIIMagePickerController+NoRotate.h 和 .m。我已将此添加到.m,我已将文件包含在调用 UIImagePickerController 但选择器仍在旋转的 viewController 中。我需要对选择器进行子类化吗?谢谢。 你应该不需要,让我试试,我会回复你。 这是针对 iPhone 应用还是 iPad 应用,UIImagePickerController 使用什么 sourceType?当我在带有 UIImagePickerControllerSourceTypePhotoLibrary 的 iPhone 上尝试此操作时,它似乎无论如何都无法在横向环境中工作。 iphone 应用程序,来源 = 相机,而不是库。 @Nick Lockwood:这在 iPad 上不适用于相机源。您还有其他解决方案吗?【参考方案6】:

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

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

    // Return YES for supported orientations.
    return (interfaceOrientation == UIInterfaceOrientationPortrait);

【讨论】:

[[UIDevice currentDevice]setOrientation:UIDeviceOrientationPortrait]; setOrientation 是一种私有方法 - 你不想在应用商店应用中使用它。【参考方案7】:
-(BOOL)shouldAutorotate 
return NO;

在你的视图控制器中试试这个。这对我有用。 注意:这是针对ios6.0及以上的

【讨论】:

【参考方案8】:

不需要创建子类,只需要为uiimagepickercontroller创建一个category,把这一行放在上面 - (BOOL)应该自动旋转 返回否;

【讨论】:

以上是关于在 ios 应用程序中将 UIImagePickerController 锁定为纵向模式的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中将 AirPlay 集成到 iOS 应用程序

如何在 iOS 应用程序中将图像打印到其确切尺寸?

如何在反应离子应用程序中将 ios 键盘返回按钮更改为下一步/完成?

在 iOS 中将图像淡化为透明

在 iOS 中将属性字符串设置为 UILabel

如何在 React Native 中将事件从 iOS 发送到 javascript