AVCapture照片输出是FlashScene Key-Value-Observing

时间:2017-03-31 18:41:45

标签: ios swift avfoundation key-value-coding avcapturephotosettings

我正在关注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。

1 个答案:

答案 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

作品!