AVCapture​Photo​Output isFlashScene Key-Value-Observing



我遵循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

工程!

相关内容

  • 没有找到相关文章

最新更新