如何设置面对面的相机变焦与快速的基础

gkh*_*cer 5 camera avfoundation ios ios-camera swift

我正在尝试使用swift制作应用程序,我想使用前置摄像头.我使用AVFoundation并尝试了一些代码.但我无法设置前置缩放参数.可能吗?对于后置摄像头,一切都运作成功.

我不想使用仿射变换.因为,它可以降低图像质量.那么,我该如何以编程方式设置此参数?

谢谢.

jnb*_*ard 1

您需要向相机添加一个 ZoomFactor 变量。

  var zoomFactor: CGFloat = 1.0
Run Code Online (Sandbox Code Playgroud)

接下来定义一个与捏合识别器结合使用的功能缩放。我假设您已经创建了一个前端捕获设备和输入。frontDevice是我相机上的一个可选捕获设备。这是我缩放该设备的方法。

  public func zoom(pinch: UIPinchGestureRecognizer) {
    guard let device = frontDevice else { return }
    func minMaxZoom(_ factor: CGFloat) -> CGFloat { return min(max(factor, 1.0), device.activeFormat.videoMaxZoomFactor) }

    func update(scale factor: CGFloat) {
      do {
        try device.lockForConfiguration()
        defer { device.unlockForConfiguration() }
        device.videoZoomFactor = factor
      } catch {
        debugPrint(error)
      }
    }

    let newScaleFactor = minMaxZoom(pinch.scale * zoomFactor)

    switch pinch.state {
      case .began: fallthrough
      case .changed: update(scale: newScaleFactor)
      case .ended:
        zoomFactor = minMaxZoom(newScaleFactor)
        update(scale: zoomFactor)
      default: break
    }
  }
Run Code Online (Sandbox Code Playgroud)

最后向某些视图添加捏合识别器。

  let pgr = UIPinchGestureRecognizer(target: self, action: #selector(zoom))
  view.addGestureRecognizer(pgr)
Run Code Online (Sandbox Code Playgroud)