2016-04-14 17 views
5

Próbuję zrobić aplikację z szybkim i chcę korzystać z kamery skierowanej do przodu. Użyłem AVFoundation i wypróbowałem kilka kodów. Ale nie mogłem ustawić parametru zoomu z przodu. Czy to możliwe? W przypadku tylnej kamery wszystko działało poprawnie.sposób ustawiania zoomu kamery z frontem z szybkim avfoundation

Nie chcę używać transformacji afinicznej. Ponieważ może to zmniejszyć jakość obrazu. Jak więc ustawić ten parametr programowo?

Dzięki.

Odpowiedz

0

Musisz dodać zmienną zoomFactor do kamery.

var zoomFactor: CGFloat = 1.0 

Następny zdefiniować funkcję zoom który ma być używany w połączeniu z rozpoznawania dociskowej. Zakładam, że stworzyłeś przednie urządzenie przechwytujące i wejście. frontDevice to opcjonalne urządzenie do przechwytywania w moim aparacie. Oto, jak powiększyć to urządzenie.

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 
    } 
    } 

Na koniec dodaj rozpoznawacz pinch do widoku.

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