加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在Swift中使用按钮切换相机

发布时间:2020-12-14 04:34:19 所属栏目:百科 来源:网络整理
导读:这似乎可以将相机从后面切换到前面,但我正在尝试提出一个’if’语句,以便我也可以将其切换回来.任何想法或建议? @IBAction func didTouchSwitchButton(sender: UIButton) { let camera = getDevice(.Front) let cameraBack = getDevice(.Back) do { input =
这似乎可以将相机从后面切换到前面,但我正在尝试提出一个’if’语句,以便我也可以将其切换回来.任何想法或建议?

@IBAction func didTouchSwitchButton(sender: UIButton) {


    let camera = getDevice(.Front)
    let cameraBack = getDevice(.Back)


    do {
        input = try AVCaptureDeviceInput(device: camera)
    } catch let error as NSError {
        print(error)
        input = nil
    }
    if(captureSession?.canAddInput(input) == true){
        captureSession?.addInput(input)
        stillImageOutput?.outputSettings = [AVVideoCodecKey : AVVideoCodecJPEG]
        if(captureSession?.canAddOutput(stillImageOutput) == true){
            captureSession?.addOutput(stillImageOutput)
            previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
            previewLayer?.frame = cameraView.bounds
            cameraView.layer.addSublayer(previewLayer!)
            captureSession?.startRunning()
        }
    }

}

解决方法

func switchCamera(_ sender: UIButton) {
    if let session = AVCaptureSession() {
        let currentCameraInput: AVCaptureInput = session.inputs[0]
        session.removeInput(currentCameraInput)
        var newCamera: AVCaptureDevice
        newCamera = AVCaptureDevice.default(for: AVMediaType.video)!

            if (currentCameraInput as! AVCaptureDeviceInput).device.position == .back {
                UIView.transition(with: self.cameraView,duration: 0.5,options: .transitionFlipFromLeft,animations: {
                    newCamera = self.cameraWithPosition(.front)!
                },completion: nil)
            } else {
                UIView.transition(with: self.cameraView,options: .transitionFlipFromRight,animations: {
                    newCamera = self.cameraWithPosition(.back)!
                },completion: nil)
            }
            do {
                try self.captureSession?.addInput(AVCaptureDeviceInput(device: newCamera))
            }
            catch {
                print("error: (error.localizedDescription)")
            }

    }
}

func cameraWithPosition(_ position: AVCaptureDevice.Position) -> AVCaptureDevice? {
    let deviceDescoverySession = AVCaptureDevice.DiscoverySession.init(deviceTypes: [AVCaptureDevice.DeviceType.builtInWideAngleCamera],mediaType: AVMediaType.video,position: AVCaptureDevice.Position.unspecified)

    for device in deviceDescoverySession.devices {
        if device.position == position {
            return device
        }
    }
    return nil
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读