捏合手势在Swift中缩放摄像头的内容

8

我正在使用应用程序的前置摄像头。 我希望用户在拍照时可以缩放相机。

我尝试了这段代码:

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)")
    }
}

每件事情在后置摄像头上都运行正常,但前置摄像头上的缩放不起作用。

我觉得前置摄像头不支持缩放功能。你试过iPhone的相机应用吗? - Kamran
是的,我检查了一些应用程序,例如https://apps.apple.com/us/app/mirror/id431471943,它支持前置摄像头缩放。 - Naqeeb
好的,你在不同模式下调试了缩放因子值吗?如果条件语句失败了是什么原因? - Kamran
是的,我没有做任何事情失败了...事实上,当我切换到后置摄像头时,它工作得很好,当我切换到前置摄像头时,代码可以工作但是缩放不适用。 - Naqeeb
1个回答

7

好的,在花费数小时的时间在这段代码上之后,我找到了我的错误。

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
  }

这对我来说很有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接