【问题标题】:Issues with changing orientation of an AVCaptureVideoPreviewLayer改变 AVCaptureVideoPreviewLayer 方向的问题
【发布时间】:2013-02-25 09:20:10
【问题描述】:

我正在使用 AVFoundation 创建摄像机 UI。包含的视图控制器将仅以 LandscapeRight 方向显示。通过预览层改变输出方向时,正确显示:

self.previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.captureSession];
self.previewLayer.orientation = AVCaptureVideoOrientationLandscapeRight;
[self.displayContainer.layer addSublayer:self.previewLayer];

但是,我意识到 AVCaptureVideoPreviewLayer 的方向属性已被弃用,取而代之的是 AVCaptureConnection.videoOrientation。当使用它时:

    self.previewLayer.connection.videoOrientation = AVCaptureVideoOrientationLandscapeRight;

预览层似乎根本没有改变方向,即使在尝试不同的方向选项时也是如此。为了按照推荐的方式执行此操作,我是否还缺少另一个步骤?

编辑:

以下是视图控制器中的自动旋转方法:

-(BOOL)shouldAutorotate
{
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscapeRight;
}

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationLandscapeRight;
}

解决方案:

通过应用@Spectravideo328 答案中的所有建议以及将预览层添加到 ViewControllers 视图层(而不是 displayContainer 子视图)来解决此问题。

【问题讨论】:

  • 请参阅下面的更新答案。

标签: ios6 avfoundation calayer avcapturesession autorotate


【解决方案1】:

您的问题不是 AvCaptureVideoPreviewLayer 问题,而是一般的 CALayer 问题(previewLayer 是其子类)。

所有 CALayers 都需要设置它们的框架:在您的情况下,我只想添加到您的代码中:

self.previewlayer.frame=self.view.bounds.

使用 self.view.bounds 而不是 self.view.frame 非常重要,这样如果设备旋转,预览层的尺寸就会旋转(调整)。

希望这会有所帮助。

更新: 这来自supportedInterfaceOrientations 帮助说明:

当用户更改设备方向时,系统会在根视图控制器或填充窗口的最顶部呈现的视图控制器上调用此方法。如果视图控制器支持新方向,则窗口和视图控制器将旋转到新方向。仅当视图控制器的 shouldAutorotate 方法返回 YES 时才会调用此方法。

更新您的 shouldAutorotate 以始终返回 YES。

【讨论】:

  • 感谢您对边界与框架的说明,我不知道这种区别。但是,这并不能解决问题。无论我使用什么方向值,预览层似乎都保持不变。
  • @Chris,我认为还有其他几个地方可能会出现问题。让我们从这个开始:你的 VC 中是否有 shouldAutorotateToInterfaceOrientation 让 VC 知道接受哪些方向?
  • 改成了YES,但是没有效果。
  • 请将self.displayContainer.layer改为self.view.layer
  • 请注意:此代码仅在 viewDidLoad 外部调用时才有效(只是花了很长时间试图找出正确代码失败的原因。Apple 在 vi​​ewDidLoad 期间为视图提供了“半初始化”边界)
猜你喜欢
  • 2014-10-30
  • 2011-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
相关资源
最近更新 更多