首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVCapture​照片​输出​密钥-值观测

AVCapture​照片​输出​密钥-值观测
EN

Stack Overflow用户
提问于 2017-03-31 18:41:44
回答 1查看 482关注 0票数 2

我正在遵循苹果最新的示例代码AVCam Swift,该代码被更新为使用AVCam

var isFlashScene: Bool { get } 指示当前由照相机预览的场景是否值得使用闪光灯的布尔值。此属性的值随摄像机当前可见的场景而变化。例如,您可以使用此属性突出显示应用程序的相机UI中的闪存控件,向用户指示场景已足够黑暗,因此启用闪光灯可能是可取的。如果照片捕获输出的supportedFlashModes值为off,则此属性的值始终为false。此属性支持键值观察。

我试图观察这个键值,所以当自动闪存模式显示这是一个闪光灯会触发的场景(就像股票iOS摄像头应用程序一样),所以我可以改变UI,就像文档注释一样。

所以我把它设成这样:

代码语言:javascript
复制
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")
  }
}

上面从来没有改变过。即使我放了一个登录

代码语言:javascript
复制
print (self.photoOutput.isFlashScene)

这在所有的时候都是错误的,尽管应用程序是假的。

我也试过:

代码语言:javascript
复制
self.photoOutput.addObserver(self, forKeyPath: "isFlashScene", options: .new, context: &FlashSceneContext)

……仍然没有改变是闪光灯的场景,它停留在虚假的。

EN

回答 1

Stack Overflow用户

发布于 2017-04-01 00:05:21

代码语言:javascript
复制
self.photoOutput.addObserver(self, forKeyPath: "isFlashScene", options: .new, context: &FlashSceneContext)

以上是设置KVO的正确方法。

必须实现photoSettingsForSceneMonitoring:

代码语言:javascript
复制
let photoSettings = AVCapturePhotoSettings()
photoSettings.flashMode = .auto
photoSettings.isAutoStillImageStabilizationEnabled = true
self.photoOutput.photoSettingsForSceneMonitoring = photoSettings

行得通!

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43147577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档