AVCapture​照片​输出为FlashScene Key-Value-Observing

Posted

技术标签:

【中文标题】AVCapture​照片​输出为FlashScene Key-Value-Observing【英文标题】:AVCapture​Photo​Output isFlashScene Key-Value-Observing 【发布时间】:2017-03-31 18:41:44 【问题描述】:

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

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 无法获取正确的可见图像

avcapture video 在改变方向时重复部分

在 iPhone 上静音 AVCapture 快门声音 [重复]

iOS 上的 AVCapture 会话中没有音频

在 AVCapture Swift 中仅捕获相机预览