AVCaptureDevice的exposurePointOfInterest在iOS14.4下不生效是什么原因?
曝光点设置无响应排查方案
iOS 14.4 版本对 .builtInDualCamera 的 exposurePointOfInterest 功能支持正常,可按照以下排查点检查遗漏配置:
- 检查是否存在曝光模式冲突:如果之前的代码设置过
exposureMode = .locked曝光锁定,即使配置了曝光兴趣点也不会触发自动调整。确认你使用的.continuousAutoExposure是当前设备支持的模式,可以在设置前加isExposureModeSupported校验。 - 调整配置的执行顺序:官方要求修改曝光相关配置前必须成功获取配置锁,不要使用强制解包的
try!,避免锁获取失败时逻辑静默失效,建议改为do-catch捕获异常。同时需要先设置曝光模式,再赋值曝光兴趣点,避免属性配置被覆盖。 - 排查自定义曝光参数冲突:如果之前调用过
setExposureModeCustom(duration:iso:completionHandler:)自定义曝光时长、ISO,或者手动设置过exposureTargetBias曝光偏移,自定义曝光模式下兴趣点配置会自动失效,必须切回自动曝光模式才会生效。 - 确认设备引用正确性:检查当前修改的
captureDevice是会话中正在使用的活跃设备,如果切换过摄像头没有更新引用,会出现修改非活跃设备配置无效果的问题。
修正后的参考代码如下:
@IBAction func didTap() { guard captureDevice.isExposurePointOfInterestSupported else { return } do { try captureDevice.lockForConfiguration() // 先校验并设置曝光模式 guard captureDevice.isExposureModeSupported(.continuousAutoExposure) else { captureDevice.unlockForConfiguration() return } captureDevice.exposureMode = .continuousAutoExposure // 再赋值曝光兴趣点 captureDevice.exposurePointOfInterest = CGPoint(x: 0.5, y: 0.5) captureDevice.unlockForConfiguration() } catch { print("相机配置锁获取失败: \(error.localizedDescription)") } }
如果需要确认配置是否生效,可以添加KVO监听 captureDevice 的 exposureTargetOffset 属性,属性值发生变动就说明曝光调整已经触发。
内容的提问来源于stack exchange,提问作者meaning-matters
相关产品推荐
相关产品推荐

