iOS8中的Camera Rotation和OverlayView

时间:2014-09-19 01:28:49

标签: objective-c camera uiimagepickercontroller ios8 cameraoverlayview

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

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

1)当设备方向旋转时,相机本身会旋转,例如世界就在旁边

2)在横向打开相机时,不会出现叠加。在Portrait中打开时很好。

这是一个使用iOS7作为基本SDK的应用程序,只有在已升级到iOS8的设备上运行应用程序时才会出现问题。该应用程序不使用故事板,它使用的是笔尖。

我希望在进入iOS8特定修补程序并在下一版本中将其用作Base 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

如果我将其改为坐在顶部"它出现在肖像和风景中!所以它必须与视图/窗口/大小有关,尽管奇怪的是当布局保持不变时它的行为会如何变化。

我已尝试同时使用showsCameraControls = YES并删除OverlayView块,问题#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每个方向更改,这很难看,但只要苹果发布修补程序或更好解决方案弹出。

1 个答案:

答案 0 :(得分:3)

Apple在iOS 8.1中解决了这个问题。