Почему autoFocusRangeRestriction не действует? - PullRequest
0 голосов
/ 23 декабря 2018

Вы можете сказать камере iPhone, чтобы она фокусировалась на ближних или дальних объектах, выполнив:

try! device.lockForConfiguration()
defer { device.unlockForConfiguration() }
device.autoFocusRangeRestriction = .near

Но независимо от того, установил я ближний, дальний или не задал его, нет никакой разницы.Я провел тестирование на двух разных телефонах - iPhone XS и X - и дал его двум разным коллегам для тестирования на случай, если я что-то делаю не так.

Мы тестировали сцены, в которых часть кадра была рядом, а остальные - далеко.и днем, и ночью.Мы ожидали, что установка ограничения диапазона на ближнюю заставляет ближнюю часть быть в фокусе, а также для дальней.Но это никогда не работает.Почему?

В случае, если это имеет значение, я изменяю ограничение диапазона после того, как устройство было добавлено в сеанс, и сеанс запущен.

Я также попытался принудительно запустить алгоритм AFпосле установки ограничения диапазона, выполнив device.focusMode = .continuousAutoFocus, но это не имеет значения.Также не device.focusMode = .autoFocus

1 Ответ

0 голосов
/ 19 января 2019

Вам не нужно форсировать алгоритм AF.Проблема, которую вы правильно определили.По сути, любые изменения, внесенные вами в устройство или captureSession после его добавления в captureSession, не будут действовать.

Решение простое:

Перед тем, как добавить устройства в качестве ввода в captureSession (и перед запуском captureSession), выполните этот код:

try! device.lockForConfiguration()
defer { device.unlockForConfiguration() }
device.autoFocusRangeRestriction = .near

Скажите, если эторешает проблему!:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...