我遵循Apple最新的示例代码AVCam Swift,该代码已更新为使用AVCapturePhotoOutput。
var isFlashScene: Bool { get }
一个布尔值,指示当前是否正在预览场景 由相机保证使用闪光灯。此属性的值更改 取决于摄像机当前可见的场景。例如 您可以使用此属性在 应用的相机 UI,向用户指示场景足够暗 启用闪光灯可能是可取的。如果照片捕获 输出支持的闪存模式值为关闭,此属性的值为 总是假的。此属性支持键值观察。
我正在尝试键值观察这一点,因此当自动闪光模式指示这是闪光灯将触发的场景时(就像股票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 Scene,它卡在False上。
self.photoOutput.addObserver(self, forKeyPath: "isFlashScene", options: .new, context: &FlashSceneContext)
以上是设置 KVO 的正确方法。
必须实现场景监控的 photoSettings:
let photoSettings = AVCapturePhotoSettings()
photoSettings.flashMode = .auto
photoSettings.isAutoStillImageStabilizationEnabled = true
self.photoOutput.photoSettingsForSceneMonitoring = photoSettings
工程!