镜像(翻转)相机预览图层

时间:2016-10-26 09:51:58

标签: ios swift camera avcapturesession

所以我使用AVCaptureSession用前置摄像头拍照。我也在这个会话中创建previewLayer,在屏幕上显示当前图像。

previewLayer = AVCaptureVideoPreviewLayer(session: session)
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill

一切都像它应该的那样。 但是现在我遇到了一个问题,因为我需要实现一个按钮来翻转/镜像(转换)这个预览图层 - 这样用户就可以选择拍摄普通的自拍图片或拍摄镜像了。

我已经尝试过转换previewLayer并且KINDA可以正常工作。问题是,如果您旋转设备,预览图片会自其转换后以其他方式旋转。 (在默认设置或任何其他相机应用程序图片中使用相机旋转)。任何人都知道如何实现这一目标?

镜像预览图层:(我尝试转换图层,甚至稍后查看,结果相同)。

@IBAction func mirrorCamera(_ sender: AnyObject) {      
  cameraMirrored = !cameraMirrored
  if cameraMirrored {
    // TRANSFORMING VIEW
    self.videoPreviewView.transform = CGAffineTransform(scaleX: -1, y: 1);
    // OR LAYER
    self.previewLayer.transform = CATransform3DMakeScale(-1, 1, 1); 
  } else {
    self.videoPreviewView.transform = CGAffineTransform(scaleX: 1, y: 1);
    self.videoPreviewView.transform = CATransform3DMakeScale(1, 1, 1);
  }        
}

2 个答案:

答案 0 :(得分:1)

AVCaptureVideoPreviewLayer具有属性mirrored。根据需要设置为true或false。

答案 1 :(得分:1)

现在,如果直接使用预览层的mirrored属性,则会在运行时收到弃用警告。当前的方法是直接使用相机的连接。您必须执行以下操作(下面的代码不是真实的代码,属性名称可能会有所不同,但是您知道了)

if (cameraPreviewLayer.connection.SupportsVideoMirroring) {
  cameraPreviewLayer.connection.automaticallyAdjustsVideoMirroring = false
  cameraPreviewLayer.connection.videoMirrored = true
}