我正在尝试使用 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/