AVFoundation使用Swift切换按钮更换摄像头

AVFoundation使用Swift切换按钮更换摄像头,swift,avfoundation,ios-camera,Swift,Avfoundation,Ios Camera,我使用AVFoundation创建自定义相机视图 如果我只使用前置或后置摄像头,它就可以工作。我可以拍照。没有问题,但当我使用切换按钮更换摄像头时,它就不工作了 我认为这是一个会话问题,我需要在更改相机视图时删除会话 我没有解决这个问题有人能帮我解决这个问题吗 这是我的密码: func getFrontCamera() -> AVCaptureDevice?{ let videoDevice = AVCaptureDevice.DiscoverySession(deviceTyp

我使用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], mediaType: AVMediaType.video, 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)
  }
}
它只适用于一个摄像头视图,但我需要使用切换按钮。 谢谢大家