ios - 添加手势捏缩放到相机预览层,iOS,Swift

标签 ios swift camera pinchzoom

我正在尝试向以编程方式添加的相机预览层添加捏缩放功能。我将下面的代码作为一个函数,但这就是我所拥有的全部,来自提示。我没有与之相关的任何其他代码。我找不到更多关于它们的信息,它们似乎都专注于静态图像。

override func viewDidLoad() {
    super.viewDidLoad()

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

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

}

我在这一行遇到错误

self.cameraPreviewlayer.addGestureRecognizer(pinchRecognizer)

它说cameraPreviewLayer没有添加geture。

这是函数。

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

最佳答案

我能够解决这个问题。

我所要做的就是移动

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

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

从 View 确实加载到我设置相机预览层的位置。

    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)

关于ios - 添加手势捏缩放到相机预览层,iOS,Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47208867/

相关文章:

ios - 文本字段的最大字符限制

ios - 选择不调用的联系委托(delegate)方法

ios - 在 Swift 中从 App 启动 App Store

ios - 将 gif 保存到 UIImage

iphone - 在iOS中旋转视频

iPhone 相机和照片编辑选项 - 自定义应用程序集成

Ios - 对 nib 文件中按钮的操作

ios - 如何让 UI TableView 在屏幕外启动?

swift - 无法将类型 'CGPoint' 的值分配给类型 'CGFloat'

ios - 在 Swift 中禁用按钮直到字段已满