2017-11-09 17 views
1

プログラムで追加されたカメラプレビューレイヤーにピンチズームを追加しようとしています。私はこのコードを関数として持っていますが、それはヒントから得たものです。私はそれに関連する他のコードを持っていません。私は静止画に焦点を当てているように見えます。カメラプレビューレイヤー、iOS、Swiftにジェスチャーピンチズームを追加する

override func viewDidLoad() { 
    super.viewDidLoad() 

    let pinchRecognizer = UIPinchGestureRecognizer(target: self, action:#selector(pinch(_:))) 

    pinchRecognizer.delegate = self 
    self.cameraPreviewlayer.addGestureRecognizer(pinchRecognizer) 

}

私はそれがcameraPreviewLayerがgetureを追加していないと言い、このライン上のエラー

self.cameraPreviewlayer.addGestureRecognizer(pinchRecognizer)

を取得します。

ここに関数があります。

@objc func pinch(_ pinch: UIPinchGestureRecognizer) { 

    let device = videoDeviceInput.device 

    // Return zoom value between the minimum and maximum zoom values 
    func minMaxZoom(_ factor: CGFloat) -> CGFloat { 
     return min(min(max(factor, minimumZoom), maximumZoom), device.activeFormat.videoMaxZoomFactor) 
    } 

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

    let newScaleFactor = minMaxZoom(pinch.scale * lastZoomFactor) 

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

答えて

1

これを修正できました。

私がしなければならなかったすべてのビューから

let pinchRecognizer = UIPinchGestureRecognizer(target: self, action:#selector(pinch(_:))) 

pinchRecognizer.delegate = self 
self.cameraPreviewlayer.addGestureRecognizer(pinchRecognizer) 

を移動しましたが、私はカメラのプレビュー層を設定する場所に負荷をしました。

cameraPreviewlayer = AVCaptureVideoPreviewLayer(session: captureSession) 
    cameraPreviewlayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill 
    cameraPreviewlayer?.connection?.videoOrientation = AVCaptureVideoOrientation.portrait 
    cameraPreviewlayer?.frame = self.view.frame 
    //  scanArea.setRegionOfInterestWithProposedRegionOfInterest(regionOfInterest) 
    self.view.layer.insertSublayer(cameraPreviewlayer!, at: 0) 
    let pinchRecognizer = UIPinchGestureRecognizer(target: self, action:#selector(pinch(_:))) 

    pinchRecognizer.delegate = self 
    self.view.addGestureRecognizer(pinchRecognizer) 
関連する問題