Я делаю приложение для камеры iOS и пытаюсь решить эту проблему в течение двух дней (но не могу решить эту проблему).
Сейчас я работаю над автоматическим изменением фокуса и экспозиции в зависимости от того, куда пользователь нажал. Иногда это работает нормально (может быть, около 20% всего), но в основном это не удается. Особенно, когда я пытаюсь сфокусироваться на дальнем объекте (например, 5+ метров) или когда есть два объекта и я пытаюсь переключить фокус с одного объекта на другой. Изображение ниже является примером.
Желтый квадрат показывает, куда нажал пользователь, и хотя я нажал на черную чашку на первом снимке, камера по-прежнему фокусируется на красной чашке.
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touchPoint = touches.first! as UITouch
let focusPoint = touchPoint.location(in: lfView)
print("focusPoint \(focusPoint)")
showPointOfInterestViewAtPoint(point: focusPoint)
setFocus(focusMode: .autoFocus, exposureMode: .autoExpose, atPoint: focusPoint, shouldMonitorSujectAreaChange: true)
}
func setFocus(focusMode: AVCaptureDevice.FocusMode, exposureMode: AVCaptureDevice.ExposureMode, atPoint devicePoint: CGPoint, shouldMonitorSujectAreaChange: Bool) {
guard let captureDevice = captureDevice else { return }
do {
try captureDevice.lockForConfiguration()
} catch let error as NSError { return }
if captureDevice.isFocusPointOfInterestSupported, captureDevice.isFocusModeSupported(focusMode) {
captureDevice.focusPointOfInterest = devicePoint
captureDevice.focusMode = focusMode
print("devicePoint: \(devicePoint)")
}
// other codes in here...
captureDevice.isSubjectAreaChangeMonitoringEnabled = shouldMonitorSujectAreaChange
captureDevice.unlockForConfiguration()
}
Я вызвал функцию setFocus в функции touchesBegan, и комментарии focusPoint и devicePoint показывают одну и ту же координату, например (297,5, 88,0).
Когда я коснулся черной чашки на картинке, я увидел, что камера iPhone немного приближается и отдаляется, как когда я использую стандартное приложение камеры iPhone и пытаюсь сфокусироваться на объекте. Итак, я предполагаю, что мое приложение камеры пытается сфокусироваться на черной чашке, но это не удается.
Поскольку это не ошибка, я не уверен, какой код изменить. Есть ли какая-нибудь подсказка, что здесь происходит и что вызывает эту проблему?
ДОБАВИТЬ ЭТУ ЧАСТЬ ПОЗЖЕ
Я также прочитал этот документ, и в нем говорится
Значение CGPoint этого свойства использует систему координат, где {0,0} – это левый верхний угол области изображения, а {1,1} – правый нижний.
Как я уже писал ранее, значение devicePoint
дает мне больше 1, например 297,5, 88,0. Это вызывает проблему?