Вывод фотографий AVCapture isFlashScene Наблюдение значения ключа

Я следую за последним примером кода Apple AVCam Swift, который обновлен для использования AVCapture Photo Output.

var isFlashScene: Bool {get}

Логическое значение, указывающее, гарантирует ли использование вспышки сцену, которая в данный момент просматривается камерой. Значение этого свойства изменяется в зависимости от сцены, видимой в данный момент для камеры. Например, вы можете использовать это свойство, чтобы выделить элемент управления вспышкой в ​​пользовательском интерфейсе камеры вашего приложения, указывая пользователю, что сцена достаточно темная, поэтому включение вспышки может оказаться желательным. Если значение outputFlashModes для вывода захвата фотографий отключено, это свойство всегда имеет значение false. Это свойство поддерживает наблюдение значения ключа.

Я пытаюсь, чтобы Key-value наблюдал это, поэтому, когда Auto Flash Mode показывает, что это сцена, которая сработает со вспышкой (точно так же, как стандартное приложение iOS Camera), я могу изменить пользовательский интерфейс, точно так же, как примечания к документации.

Итак, я настроил это так:

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)

Это выходит как Ложь все время, хотя из приложения.

Я также попробовал:

self.photoOutput.addObserver(self, forKeyPath: "isFlashScene", options: .new, context: &FlashSceneContext)

.... все еще без изменений Flash Scene, он застрял на False.

1 ответ

self.photoOutput.addObserver(self, forKeyPath: "isFlashScene", options: .new, context: &FlashSceneContext)

Выше был правильный способ настроить КВО.

photoSettingsForSceneMonitoring должен быть реализован:

let photoSettings = AVCapturePhotoSettings()
photoSettings.flashMode = .auto
photoSettings.isAutoStillImageStabilizationEnabled = true
self.photoOutput.photoSettingsForSceneMonitoring = photoSettings

Работает!

Другие вопросы по тегам