在iOS应用中查看当前使用的摄像头。

问题描述 投票:0回答:3

我正在编写一个应用程序,它有一个自定义的视图,用于用相机拍照,类似于苹果的AVCam。在其中,我想让闪光灯图标的按钮在每次切换相机时消失并重新出现。IE当使用前置摄像头时,闪光灯按钮不应该出现,而当使用后置摄像头时,闪光灯按钮应该出现!

目前我的代码是。

  AVCaptureDevicePosition position = [[videoInput device] position];

    if (position == AVCaptureDevicePositionBack) {
  self.flashButton.hidden == YES;
}

但在视频输入时出现了错误,我不知道为什么... 如果您能给我提供任何文档或修改我的代码的想法,我将非常感激

EDIT

基本上就是具体为什么这个代码会出现'使用未声明的标识符'的错误。

AVCaptureDevicePosition position = [[videoInput device] position];
ios objective-c camera avcapturedevice avcam
3个回答
2
投票

下面的代码可能会帮助你。

AVCaptureDeviceInput *newVideoInput;
AVCaptureDevicePosition currentCameraPosition = [[videoInput device] position];

if (currentCameraPosition == AVCaptureDevicePositionBack)
{
    currentCameraPosition = AVCaptureDevicePositionFront;
}
else
{
    currentCameraPosition = AVCaptureDevicePositionBack;
}

AVCaptureDevice *backFacingCamera = nil;
NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
for (AVCaptureDevice *device in devices) 
{
    if ([device position] == currentCameraPosition)
    {
        backFacingCamera = device;
    }
}
newVideoInput = [[AVCaptureDeviceInput alloc] initWithDevice:backFacingCamera error:&error];

0
投票

我一直在寻找类似问题的解决方案,并想出了这个,它可能对你有用(仅在iOS8中测试,用Swift编写)。

var captureDevice : AVCaptureDevice?

...

var currentDevice:String = captureDevice?.localizedName as String!

if currentDevice.rangeOfString("Back Camera") != nil {
   //hide flash icon
} else if currentDevice.rangeOfString("Front Camera") != nil {
   //show flash icon
}

这段代码假设你已经正确地设置了摄像头。

注意:这可能不是最好的方法,因为如果Apple决定改变localizedName,就会破坏。而且,我知道这个问题很古老,但它可能会帮助其他偶然发现它的人。


0
投票

Swift 5.2

AVCaptureDevice是一个枚举。你可以像这样检查它。

    var cameraPosition: AVCaptureDevice.Position!
    func switchCamera() {
        switch cameraPosition {
        case .back:
            cameraPosition = AVCaptureDevice.Position.front
            print(cameraPosition)
        case .front:
            cameraPosition = AVCaptureDevice.Position.back
            print(cameraPosition)
        default:
            cameraPosition = AVCaptureDevice.Position.front
            print(cameraPosition)

        }
© www.soinside.com 2019 - 2024. All rights reserved.