0

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

我目前的代码是:

  AVCaptureDevicePosition position = [[videoInput device] position];

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

但它在 videoInput 上出现错误,我不知道为什么......您可以指导我的任何文档或更改我的代码的想法将不胜感激!

编辑

只是基本上具体为什么它会在这段代码中出现“使用未声明的标识符”的错误:

AVCaptureDevicePosition position = [[videoInput device] position];
4

3 回答 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];
于 2013-05-09T11:31:51.497 回答
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 决定更改本地化名称,它将中断。而且,我知道这个问题很古老,但它可能会帮助其他偶然发现它的人

于 2014-12-05T05:26:33.563 回答
0

斯威夫特 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)

        }
于 2020-05-08T20:13:13.100 回答