将 UIImagePickerController 修复为纵向

Posted

技术标签:

【中文标题】将 UIImagePickerController 修复为纵向【英文标题】:Fix UIImagePickerController to portrait orientation 【发布时间】:2013-09-17 16:19:17 【问题描述】:

我有一个 UIImagePickerController 以这种方式添加到我的视图中:

- (IBAction)TakeCameraShot:(id)sender

if ([UIImagePickerController isSourceTypeAvailable:
     UIImagePickerControllerSourceTypeCamera])


    // Given by default your orientation is in landscaperight already
    while ([[UIDevice currentDevice] isGeneratingDeviceOrientationNotifications])
        [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.allowsEditing = YES;
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;


   /* picker.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    picker.view.backgroundColor = [UIColor clearColor];
    self.modalPresentationStyle = UIModalPresentationCurrentContext;*/
    [self presentViewController:picker animated:YES completion:nil];

   /* picker.view.layer.cornerRadius = 150;
    picker.view.clipsToBounds = YES;
    picker.view.frame = CGRectMake(12, 60, 296, 290);*/

else
    NSLog(@"Camera is not available");
    UIAlertView *alert1 = [[UIAlertView alloc] initWithTitle:@"Important message" message:@"Unfortunately the camera is not available on your device." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
    [alert1 show];


我正在尝试使用此代码防止它被旋转到横向

// Given by default your orientation is in landscaperight already
    while ([[UIDevice currentDevice] isGeneratingDeviceOrientationNotifications])
        [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];

提供的堆栈溢出的答案还说它只有在 UIviewController 已经设置为仅纵向时才有效,所以这是我从一般应用程序设置(您选择 ipad、iphone 或通用)中所做的。但这不起作用。

【问题讨论】:

【参考方案1】:

此代码可在我使用的 Ipad 上运行,但您需要添加此代码

while ([[UIDevice currentDevice] isGeneratingDeviceOrientationNotifications])
        [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];

也提交UIImagePickerController之后---

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.allowsEditing = YES;
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;

     while ([[UIDevice currentDevice] isGeneratingDeviceOrientationNotifications])
        [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
    [self presentViewController:picker animated:YES completion:nil];

while ([[UIDevice currentDevice] isGeneratingDeviceOrientationNotifications])
     [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];

这也可以在 ipod 上工作,但在 ipod 上它仍然会为您提供旋转图像,如果您想要始终在 ipod 中使用肖像图像,您需要像这样更改它们的方向

UIImageOrientationRight -- 此方向是当相机处于纵向时单击图像时的方向 UIImageOrientationUp - 当相机处于横向左侧时

UIImageOrientationDown -- 这是当相机是横向的时候

UIImageOrientationLeft -- 这是相机倒置的时候

现在除了首先将图像方向更改为 UIImageOrientationRight 之外的所有其他三个条件。

这可以通过检查即将到来的图像的方向并应用新的方向来完成。

【讨论】:

你在使用叠加层 现在试试,先生,我先换了位置,你在ipad上检查吗 其实我是在 ipod touch 上测试的,但是是的,我在两个 ios 设备上都需要它 它似乎无法在 ipod touch 上运行(设备运行的是 ios7)。旋转设备时图标仍会旋转 我实际上是在 ios 6 上运行此代码,让我在 ios 7 上检查一下,我会尽快回复您。抱歉耽搁了【参考方案2】:

只需为 UIImagePickerController 创建一个类别并将这行代码放在该类中

(BOOL) 应该自动旋转 返回否;

【讨论】:

以上是关于将 UIImagePickerController 修复为纵向的主要内容,如果未能解决你的问题,请参考以下文章

将 UIImagePickerController 与 Web 数据源一起使用

将图像加载到本机 UIImagePickerController 允许编辑

UIImagePickerController,将2个图像保存到不同名称的documentsdir

有没有办法将 UIImagePickerController 与您自己的图像一起使用?

关闭 UIImagePickerController 将 UITabBarController 重置为 0 索引 - iOS

将 UIView 覆盖添加到 UIIMagePickerController 视频录制