我正在关注Apple的最新示例代码 AVCam Swift ,该代码已更新为使用 AVCapture Photo Output 。
var isFlashScene:Bool {get}
一个布尔值,指示当前是否正在预览场景 通过相机保证使用闪光灯。此属性的值会更改 取决于相机当前可见的场景。例如, 您可以使用此属性突出显示您的闪光控制 应用程序的相机UI,向用户指示场景足够黑暗 启用闪存可能是可取的。如果照片捕获 输出的supportedFlashModes值为off,此属性的值为 总是假的。此属性支持键值观察。
我正在尝试Key-value观察这一点,所以当自动闪光模式指示这是一个闪光灯会闪现的场景(就像iOS相机应用程序一样),所以我可以更改UI,就像文档说明一样。
所以我这样设置:
private let photoOutput = AVCapturePhotoOutput()
private var FlashSceneContext = 0
self.addObserver(self, forKeyPath: "photoOutput.isFlashScene", options: .new, context: &FlashSceneContext)
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if context == & FlashSceneContext {
print ("Flash Scene Changed")
}
}
以上从未显示出变化。即使我登录检查
print (self.photoOutput.isFlashScene)
虽然不在应用程序中,但它始终显示为False。
我也尝试过:
self.photoOutput.addObserver(self, forKeyPath: "isFlashScene", options: .new, context: &FlashSceneContext)
.... Flash场景仍然没有变化,它停留在False。
答案 0 :(得分:4)
self.photoOutput.addObserver(self, forKeyPath: "isFlashScene", options: .new, context: &FlashSceneContext)
以上是设置KVO的正确方法。
必须实施photoSettingsForSceneMonitoring:
let photoSettings = AVCapturePhotoSettings()
photoSettings.flashMode = .auto
photoSettings.isAutoStillImageStabilizationEnabled = true
self.photoOutput.photoSettingsForSceneMonitoring = photoSettings
作品!