В каждой документации, которую я изучал, кажется, что AVCaptureDevice
s setTorchModeOn
принимает значение от 0.0
до 1.0
и соответственно устанавливает яркость, если такие случаи, как перегрев, не происходят. Но в моих тестах с iPhone 11 setTorchModeOn
ведет себя очень хаотично.
Кажется, что каждый последующий вызов setTorchModeOn
изменяет яркость в зависимости от последней яркости. Таким образом, если вы позвоните device.setTorchModeOn(0.1)
после вызова device.setTorchModeOn(0.2)
, яркость факела не увеличится, а в основном отключится. И это сохраняется через перезапуски приложения. Факел больше не работает, потому что я думаю, что яркость сейчас слишком мала (возможно, 0,02), чтобы он мог даже работать.
Небольшой пример для гипотезы:
guard let device = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back) else { return }
do {
try device.lockForConfiguration()
for i in stride(from: Float(0.5), to: 1.0, by: 0.1) {
try device.setTorchModeOn(level: i)
print(device.torchLevel, i)
sleep(1)
}
device.unlockForConfiguration()
} catch { print(error) }
В этом коде яркость не увеличивается, а уменьшается каждую секунду. И когда вы перезапускаете приложение, оно запускается с меньшей яркостью, чем в первый раз (так же, как при последней яркости, оставленной предыдущим запуском), и уменьшается до нуля, а затем факел не работает в приложении. Даже если я переустановлю приложение, оно не будет работать. Факел системы и камера fla sh продолжают работать, хотя. Единственный способ восстановить его - это перезагрузить телефон или щелкнуть фотографию в приложении камеры с включенным флажком sh.
Я очень озадачен этим. Нужно ли сбрасывать состояние устройства или что-то, чтобы это предотвратить? Я пытаюсь изменять яркость фонарика вверх и вниз по заданному шаблону c, но кажется, что go невозможно выполнить резервное копирование. Исключения генерируются, если вы отправляете значение за пределами (0,1) границ. Я попытался смешать его с AVCaptureDevice.maxAvailableTorchLevel
, который тоже не работал надежно. Кто-нибудь может подтвердить, что это тоже с ними происходит?
PS: device.torchLevel
похоже не отражает аргументы, которые я послал. Вместо этого, похоже, тоже странное поведение. Стандартный вывод приведенного выше кода:
0.0 0.5
0.0 0.6
0.0 0.7
0.0 0.8
0.0 0.9
Это в обоих случаях. В первом запуске, когда яркость уменьшается в 5 раз, а во втором запуске, когда яркость начинается с низкого уровня, и уменьшается один раз, прежде чем отключиться.
Вкл. iOS 13.4, Swift 5.2