Swift CameraView放大和缩小不起作用

时间:2019-06-18 06:56:32

标签: swift

在我的场景中,我试图创建一个自定义CameraView。在此处,“捏放大”和“缩小”不起作用。我该如何解决?

下面是我的代码:

  @IBAction func pinchToZoom(_ sender: UIPinchGestureRecognizer) {

  guard let device = captureDevice 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 sender.state {
    case .began: fallthrough
    case .changed: update(scale: newScaleFactor)
    case .ended:
      zoomFactor = minMaxZoom(newScaleFactor)
      update(scale: zoomFactor)
    default: break
  }
}

1 个答案:

答案 0 :(得分:0)

在这里,下面是答案对于CamerView ZoomInZoomOut来说很好用。

@IBAction func pinchToZoom(_ sender: UIPinchGestureRecognizer) {

        let captureSession = AVCaptureSession()
        captureSession.sessionPreset = AVCaptureSession.Preset.photo
        let captureDevice = AVCaptureDevice.default(for: AVMediaType.video)

        guard let device = captureDevice else { return }

        if sender.state == .changed {

            let maxZoomFactor = device.activeFormat.videoMaxZoomFactor
            let pinchVelocityDividerFactor: CGFloat = 5.0

            do {

                try device.lockForConfiguration()
                defer { device.unlockForConfiguration() }

                let desiredZoomFactor = device.videoZoomFactor + atan2(sender.velocity, pinchVelocityDividerFactor)
                device.videoZoomFactor = max(1.0, min(desiredZoomFactor, maxZoomFactor))

            } catch {
                print(error)
            }
        }
    }