2016-04-14 6 views
5

私は素早くアプリを作ろうとしています。正面カメラを使いたいです。 AVFoundationを使用していくつかのコードを試しました。しかし、私は前向きのズームパラメータを設定できませんでした。出来ますか?バックカメラの場合は、すべて正常に動作しました。早送りカメラでズームレンズを設定する方法

私は、アフィン変換を使いたくありません。なぜなら、それは画質を低下させる可能性があるからです。ですから、このパラメータをプログラム的に設定するにはどうすればよいですか?

ありがとうございました。

答えて

0

カメラにzoomFactor変数を追加する必要があります。

var zoomFactor: CGFloat = 1.0 

次にピンチ認識に関連して使用される機能ズームを定義します。私はフロントキャプチャデバイスを作成して入力したと仮定します。 frontDeviceは、カメラのオプションのキャプチャデバイスです。そのデバイスをズームする方法は次のとおりです。

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

最後に、ピンチレコグナイザをいくつかのビューに追加します。

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