【问题标题】:Camera Rotation and OverlayView in iOS8iOS8中的相机旋转和OverlayView
【发布时间】:2014-11-13 12:29:40
【问题描述】:

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

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

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

2) 在横向打开相机时,不会出现叠加层。在竖屏模式下打开就可以了。

这是一个使用iOS7作为Base SDK的应用程序,只有在升级到iOS8的设备上运行该应用程序时才会出现问题。该应用程序没有使用情节提要,它使用的是笔尖。

我希望先用 Xcode 5.1.1 推出针对此问题的修复,然后再转向 iOS8 特定的修复并在下一个版本中将其用作 Base SDK。

这是我调出相机的代码:

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(位于底部)的布局:

如果我将其更改为“位于顶部”,它会同时出现在纵向和横向中!所以它必须与视图/窗口/某物的大小有关,尽管当布局保持不变时它的行为会如何变化很奇怪。

我已经尝试使用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,这很丑陋,但在 Apple 发布修复程序或出现更好的解决方案之前就足够了。

【问题讨论】:

  • 我也面临同样的问题。请帮忙
  • 嗨,您如何在每次旋转时销毁和重新创建图像选择器?你是不是关了再打开然后每次都是竖屏?
  • 嗨@Lennie,随着编辑#1 中的更改以纵向或横向打开相机,覆盖显示正确,只是实际旋转被破坏。在UIDeviceOrientationDidChangeNotification 的触发器中,只需关闭并打开相机。这会以当前方向打开它(而不是将其旋转到新方向)并正常加载叠加层。
  • 即使在 iOS 8 中你也没有使用 ARC?天哪。

标签: objective-c camera uiimagepickercontroller ios8 cameraoverlayview


【解决方案1】:

Apple 在 iOS 8.1 中修复了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 2015-10-31
    相关资源
    最近更新 更多