微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AVFoundation 使用 Swift 切换按钮更改相机

如何解决AVFoundation 使用 Swift 切换按钮更改相机

我使用 AVFoundation 创建自定义相机视图。

如果我只使用前置或后置摄像头,它可以工作,我可以拍照没有问题,但是当我使用切换按钮更换相机时,它不起作用。

我认为这是一个会话问题,我需要在更改相机视图时删除会话。

我没有解决这个问题,谁能帮我解决问题?

这是我的代码

 func getFrontCamera() -> AVCaptureDevice?{
    let videoDevice = AVCaptureDevice.discoverySession(deviceTypes: [.builtInWideAngleCamera],mediaType: AVMediaType.video,position: .front).devices.first
      return videoDevice
  }

func getBackCamera() -> AVCaptureDevice?{
    let videoDevice = AVCaptureDevice.discoverySession(deviceTypes: [.builtInWideAngleCamera],position: AVCaptureDevice.Position.back).devices.first
      return videoDevice
  }

func setUpCamera() {
    let session = AVCaptureSession()
    if usingFrontCamera {
    
        if let device = getFrontCamera() {
            do {
                let input = try AVCaptureDeviceInput(device: device)
                if session.canAddInput(input) {
                    session.addInput(input)
                }
                
                if session.canAddOutput(output) {
                    session.addOutput(output)
                }
                
                previewLayer.videoGravity = .resizeAspectFill
                previewLayer.session = session
                
                session.startRunning()
                self.session = session
            } catch {
                print(error)
            }
        }
    } else {
        if let device = getBackCamera() {
            do {
                
                let input = try AVCaptureDeviceInput(device: device)
    
                if (session.canAddInput(input)) {
                    session.addInput(input)
                }
                
                if (session.canAddOutput(output))  {
                    session.addOutput(output)
                }
                
                previewLayer.videoGravity = .resizeAspectFill
                previewLayer.session = session
                
                session.startRunning()
                self.session = session
            } catch {
                print(error)
            }
        }
    }
}

这里是我的切换按钮:

    @IBAction func didChangeCamera(_ sender: Any) {
     usingFrontCamera = !usingFrontCamera
     setUpCamera()
    }

和 AVCapturePhotoDelegate:

extension CameraviewController: AVCapturePhotoCaptureDelegate {
func photoOutput(_ output: AVCapturePhotoOutput,didFinishProcessingPhoto photo: AVCapturePhoto,error: Error?) {
    guard let data = photo.fileDataRepresentation() else {
        return
    }
    
    let image = UIImage(data: data)
    
    session?.stopRunning()
    
    let imageView = UIImageView(image: image)
    imageView.contentMode = .scaleAspectFill
    imageView.frame = view.bounds
    view.addSubview(imageView)
  }
}

它仅适用于一个相机视图,但我需要使用切换按钮。 谢谢大家...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。