swift - 缩放手势快速放大和缩小相机
问题描述
我在我的应用程序中使用前置摄像头。我希望在拍照时用户可以放大和缩小相机
我试过这段代码
let device = AVCaptureDevice.default(for: .video)
print(sender.scale)
let vZoomFactor = sender.scale * prevZoomFactor
if sender.state == .ended {
prevZoomFactor = vZoomFactor >= 1 ? vZoomFactor : 1
}
if sender.state == .changed{
do {
try device!.lockForConfiguration()
if (vZoomFactor <= device!.activeFormat.videoMaxZoomFactor) {
device!.videoZoomFactor = max(1.0, min(vZoomFactor, device!.activeFormat.videoMaxZoomFactor))
device?.unlockForConfiguration()
} else {
print("Unable to set videoZoom: (max \(device!.activeFormat.videoMaxZoomFactor), asked \(vZoomFactor))")
}
} catch {
print("\(error.localizedDescription)")
}
}
后置摄像头一切正常,但变焦不适用于前置摄像头。
解决方案
好吧,在这段代码上花了几个小时后,我到了我犯错的地方。
let device = AVCaptureDevice.default(for: .video)
默认情况下,这将获得后置摄像头并完美运行,但是当我将其切换到前置摄像头时,直到将其视为后置摄像头,所以我只是添加了一个条件
if currentcam == frontcam {
let device = frontcam
//did other stuff for zooimng
}
else {
let device = AVCaptureDevice.default(for: .video)
//did other stuff for zooimng
}
这对我来说很好
推荐阅读
- python - UnicodeDecodeError:“utf-8”编解码器无法解码位置 23 中的字节 0x87:无效的起始字节
- python - Python挂起子进程
- clickonce - VS 2017 Mage.exe 与 YubiKey
- python - DataFrames Python如何在Python的Dataframe中循环A列中的单元格A1和单元格B2中的B列
- sql - 如何在 table n oracle 中找到最大值
- javascript - 使用 passport.js 修复“未使用中间件”错误
- c++ - 运行任意 SQL 命令 MySQL C++ (X DevAPI)?
- sql - 如何使用数据透视表格式按商店、按天和在 2 小时范围内计算记录?
- scichart - Scichart:如何赋予圆形图表 3 种或更多不同的颜色
- linux - 配置 OpenVPN