ios - AVFoundation 相机检查和翻转变量

标签 ios iphone swift camera avfoundation

我创建了一个自定义相机工具。现在,我正在尝试检查相机是否存在,但是,我只有模拟器(没有相机)和iPhone(两个相机)。我没有处理过任何相机,但我无法理解它如何适用于一台相机,因此我也无法弄清楚如何帮助用户翻转相机

目前我正在使用以下外部库 dojo custom camera

位置.Back.Front有效,我没有处理相机,但我不知道如何

  • 处理 1 个摄像头的检查

  • 根据后置和前置摄像头的存在分配一个变量来控制它们(这样我可以在VC中创建一个uibutton并控制摄像头后置和前置的翻转)。


// I call addVideoInput() while initializing

func addVideoInput() {
    if let device: AVCaptureDevice = self.deviceWithMediaTypeWithPosition(AVMediaTypeVideo, position: AVCaptureDevicePosition.Front) {
        do {
            let input = try AVCaptureDeviceInput(device: device)
            if self.session.canAddInput(input) {
                self.session.addInput(input)
            }
        } catch {
            print(error)
        }
    }
}

func deviceWithMediaTypeWithPosition(mediaType: NSString, position: AVCaptureDevicePosition) -> AVCaptureDevice? {
    let devices: NSArray = AVCaptureDevice.devicesWithMediaType(mediaType as String)
    if devices.count != 0 {
        if var captureDevice: AVCaptureDevice = devices.firstObject as? AVCaptureDevice {

            for device in devices {
                let d = device as! AVCaptureDevice
                if d.position == position {
                    captureDevice = d
                    break;
                }
            }
            print(captureDevice)
            return captureDevice
        }
    }
    print("doesnt have any camera")
    return nil

}

最佳答案

您需要删除该对象并使用少量值和 bool 值创建新对象。

在这里,我发布了创建相机位置时的代码 AVCaptureDevicePosition

在类的顶部添加enum

enum CameraType {
    case Front
    case Back
}

初始化变量。

var cameraCheck = CameraType.Back

只需更改以下功能即可。

func addVideoInput() {
        if cameraCheck ==  CameraType.Front  {
            cameraCheck = CameraType.Back
            let device: AVCaptureDevice = self.deviceWithMediaTypeWithPosition(AVMediaTypeVideo, position: AVCaptureDevicePosition.Front)
            do {
                let input = try AVCaptureDeviceInput(device: device)
                if self.session.canAddInput(input) {
                    self.session.addInput(input)
                }
            } catch {
                print(error)
            }
        }else{
            cameraCheck = CameraType.Front
            let device: AVCaptureDevice = self.deviceWithMediaTypeWithPosition(AVMediaTypeVideo, position: AVCaptureDevicePosition.Back)
            do {
                let input = try AVCaptureDeviceInput(device: device)
                if self.session.canAddInput(input) {
                    self.session.addInput(input)
                }
            } catch {
                print(error)
            }
        }        
    }

在您的 Storyboard中创建一个按钮。

现在在您的 viewcontroller 中创建一个 @IBAction 函数。

@IBAction func changeCamera(){
        self.camera = nil

        self.initializeCamera()
        self.establishVideoPreviewArea()

        if isBackCamera == true {
           isBackCamera = false
            self.camera?.cameraCheck = CameraType.Front
        }else{
            isBackCamera = true
            self.camera?.cameraCheck = CameraType.Back
        }
    }

这就是您的目标。

Also you can download the source code from here.

关于ios - AVFoundation 相机检查和翻转变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36690872/

相关文章:

ios - 在 iOS 模拟器上测试 IAP 时出现错误 {NSLocalizedDescription=Cannot connect to iTunes Store}

ios - LazyVStack 在更改 SwiftUI 时初始化所有 View

iphone - Xcode:如何显示 GPS 强度值?

ios - 带有图像和文本的 UIAlertView

ios - 带有文本 Xcode 的标签拉伸(stretch)

swift - 如何从swift访问服务器端javascript

ios - Watchkit app 控制音量父 iOS

ios - 是否可以为将 APN 发送到同一应用程序的提供商创建多个 SSL 证书?

iphone - 如何从它创建的对象中引用 Controller ?

iOS - 当全局计算发生时 UIViewControllers