objective-c - iOS8 中的相机旋转和 OverlayView

标签 objective-c camera uiimagepickercontroller ios8 cameraoverlayview

我在 iOS 8 中使用 iPad 相机时遇到问题。我看到了一些较旧的问题和 thread on the Apple Developer Forums从测试期间开始,但仍未找到解决方案。

这个问题似乎有两个部分。

1)当设备方向旋转时,相机本身也会旋转,例如世界在其一侧

2) 在风景模式下打开相机时,不出现叠加层。当以纵向打开时就很好了。

这是一个使用iOS7作为Base SDK的应用程序,仅在已升级到iOS8的设备上运行该应用程序时才会出现问题。该应用程序不使用 Storyboard,而是使用 Nib 。

我希望在转向 iOS8 特定修复并将其用作下一版本中的基础 SDK 之前,通过 Xcode 5.1.1 推出修复程序。

这是我打开相机的代码:

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] == YES) {

    // Create Camera

    imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.sourceType =  UIImagePickerControllerSourceTypeCamera;
    imagePicker.delegate = self;
    imagePicker.showsCameraControls = NO;

    // Set up custom controls view

    [[NSBundle mainBundle] loadNibNamed:@"OverlayView" owner:self options:nil];
    self.overlayView.frame = imagePicker.cameraOverlayView.frame;
    imagePicker.cameraOverlayView = self.overlayView;
    self.overlayView = nil;

    // Show Camera

    [self presentViewController:imagePicker animated:NO completion:nil];

    [imagePicker release];

}

我也尝试过

以及 OverlayView 的工具栏(位于底部)的布局:

Toolbar Layout

如果我将其更改为“位于顶部”,它会以纵向和横向形式显示!所以它一定与 View /窗口/某些东西的大小有关,尽管当布局保持不变时它的行为会如何改变很奇怪。

我已经尝试使用 showsCameraControls = YES 和散列 OverlayView block ,问题 #1 仍然存在,因此它与应用程序中的叠加层无关。

我希望有人找到了这个问题的答案,这似乎是一个很常见的问题。

如果您需要更多详细信息,请告诉我。

编辑 1:修复了叠加层(问题 #2)

它没有将方向应用于 OverlayView,如下修复:

// Grab the window frame and adjust it for orientation - from http://stackoverflow.com/a/15707997/520902

UIView *rootView = [[[UIApplication sharedApplication] keyWindow]
                        rootViewController].view;
CGRect originalFrame = [[UIScreen mainScreen] bounds];
CGRect screenFrame = [rootView convertRect:originalFrame fromView:nil];
...
self.overlayView.frame = imagePicker.cameraOverlayView.frame;

我怀疑这与相机没有意识到它的方向有关,将继续寻找问题 #1 的解决方案。

编辑 2:问题 #1 的更新

看起来相机旋转可能是 Apple 的问题。在 iOS8 上,如果您打开“通讯录”应用程序,编辑联系人并选择“拍照”,则会出现完全相同的问题 - 在默认的 Apple 应用程序中!

我仍然找不到修复程序,所以我现在只是在每次方向更改时销毁并重新创建 imagePicker,它很丑陋,但在 Apple 发布修复程序或弹出更好的解决方案之前就足够了.

最佳答案

Apple 在 iOS 8.1 中修复了此问题。

关于objective-c - iOS8 中的相机旋转和 OverlayView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25924975/

相关文章:

objective-c - 如何与 Mac OS X 中的 Photoshop 应用程序交互

ios - resizableImageWithCapInsets : issues

ios - 我应该重新设计这个实现还是可以动态地将单元格添加到 StaticTableViewController

ios - Phonegap ios 相机在设备而非模拟器上失败

ios - 横向锁定相机

ios - 选择图片会导致重新保存到相机胶卷

iphone - iOS - 在不使用 UIScrollView 的情况下通过 Quicklook 打开 PDF

ios - 在“设置”中更新相机权限后 UIViewController 关闭

Android 开源 Activity 让用户选择/创建媒体?

iphone - UIImagePickerController 在快速滚动时崩溃,比照片应用程序慢