ios - 如何使用 swift avfoundation 设置前置摄像头变焦

标签 ios swift camera avfoundation ios-camera

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

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

谢谢。

最佳答案

您需要为相机添加一个 zoomFactor 变量。

  var zoomFactor: CGFloat = 1.0

接下来定义一个函数zoom 与捏合识别器结合使用。我假设您已经创建了一个前端捕获设备和输入。 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
    }
  }

最后为某些 View 添加捏合识别器。

  let pgr = UIPinchGestureRecognizer(target: self, action: #selector(zoom))
  view.addGestureRecognizer(pgr)

关于ios - 如何使用 swift avfoundation 设置前置摄像头变焦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36622716/

相关文章:

iphone - 模态视图 Controller 因内存警告而被解雇?

ios - 您能否以编程方式在应用程序中允许推送通知?

iOS:包裹在导航 Controller 中时将数据传递给模态 VC

javascript - 自动登录网络摄像机

ios - 以编程方式设置在 View Controller 上添加的对象的标签

ios - 嵌套设置页面在 iOS13 中崩溃

android放大/缩小在自定义相机应用程序中不起作用

适用于所有 Android 设备的相机应用程序

iphone - 将 Linphone 应用程序集成到我的 iOS 应用程序

ios - 如何将另一个语言环境中的时间解析为美国语言环境?