Savez-vous ce que je peux ajouter des observateurs lors de l'utilisation continuousAutoFocus
dans AVCaptureDevice
par exemple:observateurs continu à Swift AutoFocus
videoCaptureDevice?.exposureMode = .continuousAutoExposure
videoCaptureDevice?.focusMode = .continuousAutoFocus
Je voudrais savoir quand le matériel arrête pour que je mise au point automatique KAN montrer quelques animations.
Ce code ne fonctionne que pour videoCaptureDevice?.focusMode = .autoFocus
:
videoCaptureDevice?.addObserver(self, forKeyPath: "adjustingFocus", options: NSKeyValueObservingOptions.new, context: nil)
Merci.
EDIT:
Voici le code complet:
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.black
captureSession = AVCaptureSession()
let videoInput: AVCaptureDeviceInput
do {
videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice)
if captureSession.canAddInput(videoInput) {
captureSession.addInput(videoInput)
let metadataOutput = AVCaptureMetadataOutput()
if captureSession.canAddOutput(metadataOutput) {
captureSession.addOutput(metadataOutput)
metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
metadataOutput.metadataObjectTypes = metadataOutput.availableMetadataObjectTypes // Use all metadata object types by default.
} else {
scanningActivationFailed()
return
}
if (videoCaptureDevice?.isFocusModeSupported(.continuousAutoFocus))! {
do {
if(try videoCaptureDevice?.lockForConfiguration()) != nil {
videoCaptureDevice?.exposureMode = .continuousAutoExposure
videoCaptureDevice?.focusMode = .continuousAutoFocus
videoCaptureDevice?.unlockForConfiguration()
}
} catch {
}
}
videoCaptureDevice?.addObserver(self, forKeyPath: "adjustingFocus", options: NSKeyValueObservingOptions.new, context: nil)
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(ScannerViewController.focusCapture(_:)))
mainView.addGestureRecognizer(tapGesture)
previewLayer = AVCaptureVideoPreviewLayer(session: captureSession);
previewLayer.frame = view.layer.bounds;
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
mainView.layer.addSublayer(previewLayer);
/*
// Initialize code Frame to highlight the code
codeFrameView.layer.borderColor = UIColor.green.cgColor
codeFrameView.layer.borderWidth = 2
view.addSubview(codeFrameView)
view.bringSubview(toFront: codeFrameView)
*/
captureSession.startRunning()
} else {
scanningActivationFailed()
}
} catch {
scanningActivationFailed()
}
}
et
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "adjustingFocus" {
if let changed = change?[NSKeyValueChangeKey.newKey] as? Bool {
animateFocus(animate: changed)
}
}else
{
print(keyPath)
}
}
Vous devez fournir une liste de codes plus complète et une description de ce qui se passe ou non. En l'état, votre question est difficile à répondre. –