1

我关注的苹果公司最新的示例代码AVCam斯威夫特,这将更新为使用AVCapture照片输出AVCapture照片输出isFlashScene键 - 值观察

VAR isFlashScene:布尔{}获取指示是否现场目前正由相机权证使用闪光灯的预览

一个布尔值。该属性的值根据相机当前可见的场景而变化 。例如, 您可以使用此属性来突出显示您的应用的相机UI中的闪光灯控件,向用户表明该场景足够暗 可以启用闪光灯。如果图片捕获 输出的supportedFlashModes值已关闭,则此属性的值为 始终为false。该属性支持键值观察。

我想键值观察这个,所以当自动闪光模式表明这是一个场景,闪光灯将触发(就像股票iOS相机应用),所以我可以改变用户界面,就像文档说明。

所以我把它像这样:

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) 

....仍然没有改变闪光灯的场景,它是贴在假。

+1

[This](http://stackoverflow.com/questions/28285118/ios-check-if-torch-is-on)线程可以帮助你,我希望。 – iphonic

+0

不幸的是没有......但看起来像添加观察者的正确方法是:self.photoOutput.addObserver(self,forKeyPath:“isFlashScene”,选项:.new,上下文:&FlashSceneContext) – Gizmodo

+0

这似乎是一个错误isFlashScene 。 – Gizmodo

回答

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 

作品!