您可以通过执行以下操作来告诉iPhone相机聚焦于近处或远处的物体:
try! device.lockForConfiguration()
defer { device.unlockForConfiguration() }
device.autoFocusRangeRestriction = .near
但无论我是靠近,远离还是离开它都没有任何区别。我在两部不同的手机上测试过 - iPhone XS和X - 然后把它交给两个不同的同事进行测试,以防万一我做错了。
我们在白天和晚上测试了框架的一部分靠近而其余部分远离的场景。我们期望将范围限制设置为接近使得近部分成为焦点,同样对于远部。但它永远不会奏效。为什么?
如果重要,我会在将设备添加到会话并且会话正在运行后更改范围限制。
我也尝试通过执行device.focusMode = .continuousAutoFocus
强制AF算法在设置范围限制后运行,但它没有什么区别。 device.focusMode = .autoFocus
也没有
你不需要做AF算法强制。您正确识别的问题。基本上,对设备或captureSession添加到captureSession后所做的任何修改都不会生效。
解决方案很简单:
在将设备作为输入添加到captureSession之前(以及在运行captureSession之前),请执行以下代码:
try! device.lockForConfiguration()
defer { device.unlockForConfiguration() }
device.autoFocusRangeRestriction = .near
告诉我,如果这解决了问题! :)