AVFoundation: Как обнаружить макро -режим с помощью AvCapturedEvice?IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 AVFoundation: Как обнаружить макро -режим с помощью AvCapturedEvice?

Сообщение Anonymous »

Мне нужно воспроизвести нативное поведение Camera.App, в частности, макрос режима.

Код: Выделить всё

if device.activePrimaryConstituentDeviceSwitchingBehavior != .unsupported {
device.setPrimaryConstituentDeviceSwitchingBehavior(.auto, restrictedSwitchingBehaviorConditions: [])
}
< /code>
Это отлично работает, но теперь мне нужно отобразить в моем пользовательском интерфейсе, что камера ввела макро -режим. И вот где все становится сложным: макро-режим-это в основном просто сверхширочная камера, которая увеличивается (или обрезана), верно?let activeConstituentObserver = device.observe(\.activePrimaryConstituent, options: [.new]) { [weak self] device, change in
guard let self = self else { return }
guard let activePrimaryConstituentDevice = change.newValue ?? device.activePrimaryConstituent else { return }
let isMacroEnabled = activePrimaryConstituentDevice.deviceType == .builtInUltraWideCamera
DispatchQueue.main.async {
self.cameraView.macroButton.isHidden = !isMacroEnabled
}
}
< /code>
Но этот наблюдатель вызывается каждый раз, когда меняется активное компонентное устройство, то есть каждый раз, когда ультраизговая камера становится активной (когда пользователь увеличивается до 0,5x). AvcapturedEvice 
не имеет свойства "Isinmacromode", так что же нам делать? Ну, поскольку макро-режим-это просто обрезанная сверхширочная камера, тогда нам, вероятно, нужно посмотреть на свойство videozoomfactor , верно? Но оба устройства имеют свои Videozoomfactors для своих значений по умолчанию (0,5x и 1x с точки зрения пользователя) < /p>

Код: Выделить всё

let activeConstituentObserver = device.observe(\.activePrimaryConstituent, options: [.new]) { [weak self] device, change in
guard let self = self else { return }
guard let activePrimaryConstituentDevice = change.newValue ?? device.activePrimaryConstituent else { return }
let isMacroEnabled = activePrimaryConstituentDevice.deviceType == .builtInUltraWideCamera
print("activePrimaryConstituentDevice zoom: ", activePrimaryConstituentDevice.videoZoomFactor) // 1.0 (aka 0.5x)
print("virtualDevice zoom: ", device.videoZoomFactor) // 2.0 (aka 1x)
DispatchQueue.main.async {
self.cameraView.macroButton.isHidden = !isMacroEnabled
}
}
Итак, мой вопрос: как я могу обнаружить, что виртуальное устройство введено в режим макроса (не просто изменил камеру на сверхшировую)?

Подробнее здесь: https://stackoverflow.com/questions/795 ... turedevice
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • AVFoundation -AVCaptureSession останавливается и начинает работать только при переходе в фоновый режим и обратно с точко
    Anonymous » » в форуме IOS
    0 Ответы
    83 Просмотры
    Последнее сообщение Anonymous
  • AVFoundation -AVCaptureSession останавливается и начинает работать только при переходе в фоновый режим и обратно с точко
    Anonymous » » в форуме IOS
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Конфликт макро -членов и функций -члена
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Макро журнала, который регистрирует именованные переменные
    Anonymous » » в форуме C++
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Макро журнала, который регистрирует именованные переменные
    Anonymous » » в форуме C++
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «IOS»