Réglez L'Appareil Photo Se Concentrer Sur Touchez Point Avec Swift
L'API pour utiliser l'appareil dans des swift semble un mais différentes et je vais avoir un moment difficile la focalisation de la caméra sur un point. Lorsque l'utilisateur appuie sur l'écran, je veux la caméra de se concentrer sur ce point
C'est mon code:
func focusCamera(point:CGPoint)
{
var screenRect:CGRect = bounds
var focusX = Float(point.x/screenRect.width)
var focusY = Float(point.y/screenRect.height)
_currentDevice.lockForConfiguration(nil)
_currentDevice.setFocusModeLockedWithLensPosition(focusX)
{
time in
self._currentDevice.unlockForConfiguration()
}
_currentDevice.setFocusModeLockedWithLensPosition(focusY)
{
time in
self._currentDevice.unlockForConfiguration()
}
}
Mais il ne semble pas fonctionner.
Toutes les suggestions sont plus que bienvenus!
OriginalL'auteur Aggressor | 2014-10-31
Vous devez vous connecter pour publier un commentaire.
Mise à jour de la réponse de @ryantxr pour Swift 3:
let devicePoint: CGPoint = (self.previewView.layer as! AVCaptureVideoPreviewLayer).captureDevicePointOfInterestForPoint(gestureRecognizer.locationInView(gestureRecognizer.view))
au lieu de saisir manuellement le calcul les coordonnées de l'appareil.OriginalL'auteur OxyFlax
Meilleure solution, car elle fonctionne correctement pour toutes les
videoGravity
modes, également lors de la prévisualisation de la couche de rapport d'aspect est différent de l'appareil ratio:OriginalL'auteur fabb
Mise à jour de la réponse de @Code Swift 2.
La documentation dit aussi que nous devrions utiliser le point de méthodes de conversion dans
AVCaptureVideoPreviewLayer
captureDevicePointOfInterest. Cette réponse ne fonctionne pas correctement, probablement parce qu'il ignore l'orientation de l'écran. Je préfère utilisercaptureDevicePointOfInterest
.Aussi cette réponse ne fonctionne pas correctement lorsque le
videoView
n'ont pas le même format que le raw de l'appareil de sortie d'image (par exemple lors de l'utilisation devideoGravity
).OriginalL'auteur ryantxr
S'avère très simple:
let gesture = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))
etmyView.addGesture(gesture)
. Avec cela, vous créezhandleTap
qui ressemble àfunc handleTap(tap: UITapGestureRecognizer)
et puis le code ci-dessus va là-bas.OriginalL'auteur Aggressor
Cette question est peut-être un doublon de iOS mise au point par toucher, où j'ai posté cela, nous l'espérons explicite) de la solution qui a fonctionné pour moi:
Avec un
videoView: UIView
l'affichage de la vidéo, etcameraDevice: AVCaptureDevice
, la suite semble fonctionner pour moi:Que j'ai eu à échanger le
x
ety
coordonnées et remappage de lax
coord de 1 à 0 au lieu de 0 à 1 — ne sais pas pourquoi cela devrait être le cas, mais il semble être nécessaire pour le faire fonctionner à droite (même si c'est un peu difficile à tester).OriginalL'auteur Cody
Swift 2.0
OriginalL'auteur
J'ai utilisé
AVFoundation
bibliothèque et d'une cape Camera Manager.Je suis le partage de code de l'échantillon. Vous pouvez adapter votre projet.
Par la voie, vous ne pouvez pas la focale de la caméra à l'aide de camera frontale. Il ne le supporte pas. Vous ne pouvez régler l'exposition pour l'avant-caméra. Rare-appareil photo, vous pouvez le faire.
OriginalL'auteur gkhanacer