Ios AVCapture&x200B;照片​;输出isFlashScene键值

Ios AVCapture&x200B;照片​;输出isFlashScene键值,ios,swift,avfoundation,key-value-coding,avcapturephotosettings,Ios,Swift,Avfoundation,Key Value Coding,Avcapturephotosettings,我正在关注苹果公司最新的示例代码AVCam Swift,该代码已更新为使用AVCapture​照片​输出 var isFlashScene:Bool{get} 一个布尔值,指示当前是否预览场景 由相机保证使用闪光灯。此属性的值将更改 取决于摄影机当前可见的场景。例如 您可以使用此属性突出显示屏幕中的闪存控件 应用程序的照相机用户界面,向用户指示场景足够暗 启用闪存可能是可取的。如果照片捕捉到 输出的supportedFlashModes值为off,此属性的值为 总是假的。此属性支持键值观察 我正

我正在关注苹果公司最新的示例代码AVCam Swift,该代码已更新为使用AVCapture​照片​输出

var isFlashScene:Bool{get}

一个布尔值,指示当前是否预览场景 由相机保证使用闪光灯。此属性的值将更改 取决于摄影机当前可见的场景。例如 您可以使用此属性突出显示屏幕中的闪存控件 应用程序的照相机用户界面,向用户指示场景足够暗 启用闪存可能是可取的。如果照片捕捉到 输出的supportedFlashModes值为off,此属性的值为 总是假的。此属性支持键值观察

我正试图观察这个键值,所以当自动闪光模式指示这是一个闪光灯将触发的场景(就像股票iOS摄像头应用程序),所以我可以改变用户界面,就像文档注释一样

所以我把它设置成这样:

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)
这在应用程序中始终是错误的

我还尝试:

self.photoOutput.addObserver(self, forKeyPath: "isFlashScene", options: .new, context: &FlashSceneContext)
。。。。仍然没有改变的是闪光的场景,它是停留在错误的

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

工作

我希望线程可以帮助您。不幸的是,这里没有任何内容。但是看起来添加观察者的正确方法是:self.photoOutput.addObserver(self,forKeyPath:“isFlashScene”,options:.new,context:&FlashSceneContext)。这似乎是isFlashScene的一个bug。