Я создаю приложение, которое блокирует фокус камеры для целей видеозаписи. Я хочу заблокировать фокус до бесконечности, не заставляя пользователя вручную настраивать фокус. Это возможно? Спасибо!
Есть ли способ программно установить фокусировку камеры с устройства iOS на бесконечность?
Ответ 1
Это способ отключить фокус, он блокирует его все время:
// Find a suitable capture device
AVCaptureDevice *cameraDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
// SETUP FOCUS MODE
if ([cameraDevice lockForConfiguration:nil]) {
[cameraDevice setFocusMode:AVCaptureFocusModeLocked];
[cameraDevice unlockForConfiguration];
}
else{
NSLog(@"error while configuring focusMode");
}
Что значит "блокировать фокус до бесконечности"?
Ответ 2
К сожалению, нет. Вы можете установить камеру в режим блокировки фокуса, как сказал Артем; в режиме автофокусировки (фокусировка, затем блокировка) или непрерывный режим автофокусировки, но вы не можете дать камере определенное расстояние для фокусировки.
Лучшее, что я смог придумать (для контроля экспозиции и баланса белого, которые так же ограничены) состоит в том, чтобы пользователь указывал камеру на подходящую сцену (в вашем случае, что-то далеко) и он/она нажимает кнопку блокировки.
Подробности об API-интерфейсе устройства захвата, например: https://developer.apple.com/library/mac/#documentation/AVFoundation/Reference/AVCaptureDevice_Class/Reference/Reference.html
Ответ 3
AVCaptureDevice имеет функцию setFocusModeLockedWithLensPosition: completeHandler:
Вы можете использовать его для установки 1.0 для достижения расстояния "бесконечности"
func focusTo(value : Float) {
if let device = captureDevice {
if(device.lockForConfiguration(nil)) {
device.setFocusModeLockedWithLensPosition(value, completionHandler: { (time) -> Void in
//
})
device.unlockForConfiguration()
}
}
Обновление: Согласно документации Apple 1.0 не представляет фокус на бесконечности.