2016-04-14 19 views
5

Ich versuche, eine App mit swift, und ich möchte nach vorne gerichtete Kamera zu machen. Ich habe AVFoundation benutzt und einige Codes ausprobiert. Aber ich konnte den nach vorne gerichteten Zoom-Parameter nicht einstellen. Ist es möglich? Für die Rückkamera funktionierte alles erfolgreich.wie Front-Kamera Zoom mit schnellen avfoundation

Ich möchte nicht Affine Transformation verwenden. Weil, kann es die Bildqualität verringern. Also, wie kann ich diesen Parameter programmatisch einstellen?

Danke.

Antwort

0

Sie müssen Ihrer Kamera eine ZoomFactor-Variable hinzufügen.

var zoomFactor: CGFloat = 1.0 

nächstes definieren eine Funktion zoom mit einem Pinch-Erkenner in Verbindung verwendet werden. Ich nehme an, Sie haben ein Front-Capture-Gerät erstellt und eingegeben. Frontgerät ist ein optionales Aufnahmegerät an meiner Kamera. So zoome ich das Gerät heran.

public func zoom(pinch: UIPinchGestureRecognizer) { 
    guard let device = frontDevice else { return } 
    func minMaxZoom(_ factor: CGFloat) -> CGFloat { return min(max(factor, 1.0), device.activeFormat.videoMaxZoomFactor) } 

    func update(scale factor: CGFloat) { 
     do { 
     try device.lockForConfiguration() 
     defer { device.unlockForConfiguration() } 
     device.videoZoomFactor = factor 
     } catch { 
     debugPrint(error) 
     } 
    } 

    let newScaleFactor = minMaxZoom(pinch.scale * zoomFactor) 

    switch pinch.state { 
     case .began: fallthrough 
     case .changed: update(scale: newScaleFactor) 
     case .ended: 
     zoomFactor = minMaxZoom(newScaleFactor) 
     update(scale: zoomFactor) 
     default: break 
    } 
    } 

Schließlich fügen Sie eine Pinch Recognizer zu einer Ansicht hinzu.

let pgr = UIPinchGestureRecognizer(target: self, action: #selector(zoom)) 
    view.addGestureRecognizer(pgr)