Как переключить камеру кнопкой в ​​Swift? - PullRequest
0 голосов
/ 06 мая 2020

Я создаю представление, чтобы сделать снимок и отправить его на сервер. Я сделал кнопку для переключения камеры с задней камеры на переднюю и наоборот, но я не уверен, как это реализовать. Я провел свое исследование, но все еще не понимаю, как реализовать это в моем проекте, потому что я новичок в программировании iOS. Вот некоторые из моих кодов:

Некоторые из моих AVFoundation переменных

private var session: AVCaptureSession!
private var stillImageOutput: AVCapturePhotoOutput!
private var stillImageSettings: AVCapturePhotoSettings!
private var previewLayer: AVCaptureVideoPreviewLayer!

Моя setupCamera() функция. Я также вызываю эту функцию на viewDidAppear()

func setupCamera() {
        shutterButton.isUserInteractionEnabled = false

        if self.session != nil {
            self.session.stopRunning()
        }

        session = AVCaptureSession()
        session.sessionPreset = .photo
        guard let setCam: AVCaptureDevice = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back) else {return}

        if setCam.isFocusModeSupported(.continuousAutoFocus) && setCam.isFocusPointOfInterestSupported {
            do {
                try setCam.lockForConfiguration()
                let focusPoint = CGPoint(x: 0.5, y: 0.5)
                setCam.focusPointOfInterest = focusPoint
                setCam.focusMode = .continuousAutoFocus
                setCam.isSubjectAreaChangeMonitoringEnabled = true
                setCam.unlockForConfiguration()
            } catch let error {
                print(error.localizedDescription)
            }
        }

        AVCaptureDevice.requestAccess(for: AVMediaType.video) { response in
            if response {
                // Access Granted
            } else {
                // Access Denied
                let alert = KPMAlertController(title: "Sorry", message: "Mohon maaf, untuk melakukan pengambilan foto, anda harus memberi akses penggunaan kamera", icon: UIImage(named: "ic_info_big"))
                let okAct = KPMAlertAction(title: "OK", type: .regular, handler : {
                    // Open setting
                    UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!)
                    self.navigationController?.popViewController(animated: true)
                })
                alert.addAction(okAct)
                self.present(alert, animated: true, completion: nil)
            }
        }

        do {
            let input: AVCaptureDeviceInput = try AVCaptureDeviceInput(device: setCam)

            if self.session.canAddInput(input) {
                self.session.addInput(input)
                self.stillImageOutput = AVCapturePhotoOutput()
                if self.session.canAddOutput(self.stillImageOutput) {
                    self.session.addOutput(self.stillImageOutput)

                    self.previewLayer = AVCaptureVideoPreviewLayer(session: self.session)
                    self.previewLayer.frame = self.cameraView.bounds
                    self.previewLayer.videoGravity = .resizeAspectFill
                    self.previewLayer.connection?.videoOrientation = .portrait

                    self.cameraView.layer.addSublayer(self.previewLayer)

                    self.shutterButton.isUserInteractionEnabled = true

                    self.session.startRunning()
                    self.backButton.superview?.bringSubviewToFront(self.backButton)

                    self.shutterButton.superview?.bringSubviewToFront(self.shutterButton)
                }
            }

            ProgressHUD.dismiss()
        } catch let error {
            print(error.localizedDescription)
            ProgressHUD.dismiss()
        }
    }

И я хочу реализовать здесь функцию переключения

@IBAction func switchCameraAction(_ sender: Any) {
    // The code to implement switching camera functionalities
}

Если вам нужно больше кода, не стесняйтесь спрашивать меня. Любая помощь будет оценена. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...