2

我正在关注 Apple 最新的示例代码AVCam Swift,它已更新为使用AVCapture​Photo​Output

var isFlashScene: 布尔 { 获取 }

一个布尔值,指示相机当前正在预览的场景是否需要使用闪光灯。此属性的值根据相机当前可见的场景而变化。例如,您可以使用此属性突出显示应用程序的相机 UI 中的闪光灯控件,向用户指示场景足够暗,可能需要启用闪光灯。如果照片捕获输出的supportedFlashModes 值为关闭,则此属性的值始终为false。该属性支持键值观察。

我正在尝试键值观察这一点,因此当自动闪光模式表明这是一个闪光灯将触发的场景时(就像股票 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 上。

4

1 回答 1

5
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

作品!

于 2017-04-01T00:05:21.667 回答