如何实现Pinch To Zoom in camera(Swift 3)?

Dan*_*cas 1 ios swift

我想在QR应用程序中实现一个简单的缩放缩放手势.
这看起来很简单,所以我做了一些研究,我发现了一些问题的可能答案:

AVCaptureDevice Camera Zoom
如何在自定义相机中实现"捏缩放"
捏缩放相机
在iOS中使用AVCapture捕捉视频时缩放

不幸的是,没有人真正解决它,我个人喜欢第一个(在Objective-C中),我试图在Swift 3中做到这一点.

我用一些尝试后想出的代码发布了一个答案,欢迎其他更简单/更好/更简单的解决方案:)

Dan*_*cas 9

我使用了Pinch Gesture Recognizer故事板,然后链接了这个动作:

@IBAction func pinchToZoom(_ sender: UIPinchGestureRecognizer) {

        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)
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

请注意,这captureDevice是该类的可选对象AVCaptureDevice.