2016-04-14 59 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 
    } 
    } 

最後在一些視圖中添加一個pinch識別器。

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