【问题标题】:How to switch to front camera in Swift 2?如何在 Swift 2 中切换到前置摄像头?
【发布时间】:2016-03-31 20:47:52
【问题描述】:

我的 ViewDidAppear 中有所有这些代码

captureSession = AVCaptureSession()


   // let backCamera = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
    var captureDevice:AVCaptureDevice! = nil
    if (camera == CameraType.Front) {
        let videoDevices = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo)

        for device in videoDevices{
            let device = device as! AVCaptureDevice
            if device.position == AVCaptureDevicePosition.Front {
                captureDevice = device
                break
            }
        }
    } else {
        captureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
    }

    do {
        let input = try? AVCaptureDeviceInput(device: captureDevice)

        if (captureSession?.canAddInput(input) != nil){

            captureSession?.addInput(input)

            stillImageOutput = AVCaptureStillImageOutput()
            stillImageOutput?.outputSettings = [AVVideoCodecKey : AVVideoCodecJPEG]

            if (captureSession?.canAddOutput(stillImageOutput) != nil){
                captureSession?.addOutput(stillImageOutput)

                previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)

                previewLayer?.videoGravity = AVLayerVideoGravityResizeAspect
                previewLayer?.connection.videoOrientation = AVCaptureVideoOrientation.Portrait
                cameraView.layer.addSublayer(previewLayer!)
                captureSession?.startRunning()

            }

            cameraView.bringSubviewToFront(actionView)
            previewImageView.bringSubviewToFront(actionView)
            self.previewImageView.hidden = true


        }
    }

【问题讨论】:

    标签: ios swift swift2 avcapturedevice


    【解决方案1】:

    Xcode 8.2.1 • Swift 3.0.2

    captureDevice = (AVCaptureDevice.devices() as? [AVCaptureDevice])?
                        .filter({ $0.hasMediaType(AVMediaTypeVideo) && $0.position == .front}).first
    

    斯威夫特 2

    captureDevice = (AVCaptureDevice.devices()
        .filter{ $0.hasMediaType(AVMediaTypeVideo) && $0.position == .Front})
        .first as? AVCaptureDevice
    

    【讨论】:

      【解决方案2】:

      你试过了吗:

      let device = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo)
                  .map { $0 as! AVCaptureDevice }
                  .filter { $0.position == .Front}
                  .first!
      

      【讨论】:

      • AVCaptureDevice.devicesWithMediaType 在 iOS 10 中已被弃用。Apple 建议使用 AVCaptureDevice.DiscoverySession 来确定可用的设备。文档链接:https://developer.apple.com/documentation/avfoundation/avcapturedevice/discoverysession
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多