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 

作品!