AVCapture照片输出为FlashScene Key-Value-Observing
Posted
技术标签:
【中文标题】AVCapture照片输出为FlashScene Key-Value-Observing【英文标题】:AVCapturePhotoOutput isFlashScene Key-Value-Observing 【发布时间】:2017-03-31 18:41:44 【问题描述】:我正在关注 Apple 最新的示例代码 AVCam Swift,它已更新为使用 AVCapturePhotoOutput。
var isFlashScene: Bool get
一个布尔值,指示当前是否正在预览场景 由相机保证使用闪光灯。该属性的值发生变化 取决于相机当前可见的场景。例如, 你可以使用这个属性来突出显示你的 Flash 控件 应用程序的相机 UI,向用户指示场景足够暗 启用闪光灯可能是可取的。如果拍摄照片 output 的 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 上。
【问题讨论】:
This线程可以帮助你,我希望。 不幸的是那里什么都没有..但看起来添加观察者的正确方法是:self.photoOutput.addObserver(self, forKeyPath: "isFlashScene", options: .new, context: &FlashSceneContext)跨度> 这似乎是 isFlashScene 的一个错误。 【参考方案1】: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
有效!
【讨论】:
以上是关于AVCapture照片输出为FlashScene Key-Value-Observing的主要内容,如果未能解决你的问题,请参考以下文章
更新到 Xcode 9 / Swift 4 后 AVCapture 出现奇怪的编译错误 [重复]
AvCapture / AVCaptureVideoPreviewLayer 无法获取正确的可见图像