如何检测前置摄像头是否处于活动状态



我有一个ui按钮来激活和停用闪存。 当我将相机更改为前置时,我需要隐藏按钮,因为它前面没有闪光灯。而且,当我再次将凸轮更改为返回时,需要取消隐藏。感谢您的帮助。

 @IBAction func changeCamera(sender: AnyObject) {
    dispatch_async(self.sessionQueue, {
        let currentVideoDevice:AVCaptureDevice = self.videoDeviceInput!.device
        let currentPosition: AVCaptureDevicePosition = currentVideoDevice.position
        var preferredPosition: AVCaptureDevicePosition = AVCaptureDevicePosition.Unspecified
        switch currentPosition{
        case AVCaptureDevicePosition.Front:
            preferredPosition = AVCaptureDevicePosition.Back
        case AVCaptureDevicePosition.Back:
            preferredPosition = AVCaptureDevicePosition.Front
        case AVCaptureDevicePosition.Unspecified:
            preferredPosition = AVCaptureDevicePosition.Back
        }

        let device:AVCaptureDevice = takePhotoScreen.deviceWithMediaType(AVMediaTypeVideo, preferringPosition: preferredPosition)
        var videoDeviceInput: AVCaptureDeviceInput?
        do {
            videoDeviceInput = try AVCaptureDeviceInput(device: device)
        } catch _ as NSError {
            videoDeviceInput = nil
        } catch {
            fatalError()
        }

        self.session!.beginConfiguration()
        self.session!.removeInput(self.videoDeviceInput)
        if self.session!.canAddInput(videoDeviceInput){
            NSNotificationCenter.defaultCenter().removeObserver(self, name:AVCaptureDeviceSubjectAreaDidChangeNotification, object:currentVideoDevice)
            takePhotoScreen.setFlashMode(AVCaptureFlashMode.Auto, device: device)
            NSNotificationCenter.defaultCenter().addObserver(self, selector: "subjectAreaDidChange:", name: AVCaptureDeviceSubjectAreaDidChangeNotification, object: device)
            self.session!.addInput(videoDeviceInput)
            self.videoDeviceInput = videoDeviceInput
        }else{
            self.session!.addInput(self.videoDeviceInput)
        }
        self.session!.commitConfiguration()

        dispatch_async(dispatch_get_main_queue(), {
            self.snapButton.enabled = true
            self.cameraButton.enabled = true
        })
    })
}

@IBAction func toggleTorch(sender: AnyObject) {
    let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
    if (device.hasTorch) {
        do {
            try device.lockForConfiguration()
            if (device.torchMode == AVCaptureTorchMode.On) {
                device.torchMode = AVCaptureTorchMode.Off
            } else {
                do {
                    try device.setTorchModeOnWithLevel(1.0)
                } catch {
                    print(error)
                }
            }
            device.unlockForConfiguration()
        } catch {
            print(error)
        }
    }    }

你可以在这里编写隐藏取消隐藏的代码

 switch currentPosition{
    case AVCaptureDevicePosition.Front:{
           preferredPosition = AVCaptureDevicePosition.Back;
         // UNHIDE FLASH BUTTON HERE
           break;
         }
    case AVCaptureDevicePosition.Back:{
            preferredPosition = AVCaptureDevicePosition.Front
         // HIDE FLASH BUTTON HERE
           break;
         }
    case AVCaptureDevicePosition.Unspecified:
        preferredPosition = AVCaptureDevicePosition.Back
    }

附言 - 我不太了解快速语法,但这应该为您指明正确的方向。每当使用开关时,也要使用中断。不知道 swift 2.0 是否需要它,但仍然是它的良好做法。

相关内容

最新更新