我正在遵循苹果最新的示例代码AVCam Swift,该代码被更新为使用AVCam
var isFlashScene: Bool { get } 指示当前由照相机预览的场景是否值得使用闪光灯的布尔值。此属性的值随摄像机当前可见的场景而变化。例如,您可以使用此属性突出显示应用程序的相机UI中的闪存控件,向用户指示场景已足够黑暗,因此启用闪光灯可能是可取的。如果照片捕获输出的supportedFlashModes值为off,则此属性的值始终为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)这在所有的时候都是错误的,尽管应用程序是假的。
我也试过:
self.photoOutput.addObserver(self, forKeyPath: "isFlashScene", options: .new, context: &FlashSceneContext)……仍然没有改变是闪光灯的场景,它停留在虚假的。
发布于 2017-04-01 00:05:21
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行得通!
https://stackoverflow.com/questions/43147577
复制相似问题