カメラにzoomFactor変数を追加する必要があります。
var zoomFactor: CGFloat = 1.0
次にピンチ認識に関連して使用される機能ズームを定義します。私はフロントキャプチャデバイスを作成して入力したと仮定します。 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
}
}
最後に、ピンチレコグナイザをいくつかのビューに追加します。
let pgr = UIPinchGestureRecognizer(target: self, action: #selector(zoom))
view.addGestureRecognizer(pgr)