我正在编写一个应用程序,它有一个自定义的视图,用于用相机拍照,类似于苹果的AVCam。在其中,我想让闪光灯图标的按钮在每次切换相机时消失并重新出现。IE当使用前置摄像头时,闪光灯按钮不应该出现,而当使用后置摄像头时,闪光灯按钮应该出现!
目前我的代码是。
AVCaptureDevicePosition position = [[videoInput device] position];
if (position == AVCaptureDevicePositionBack) {
self.flashButton.hidden == YES;
}
但在视频输入时出现了错误,我不知道为什么... 如果您能给我提供任何文档或修改我的代码的想法,我将非常感激
EDIT
基本上就是具体为什么这个代码会出现'使用未声明的标识符'的错误。
AVCaptureDevicePosition position = [[videoInput device] position];
下面的代码可能会帮助你。
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];
我一直在寻找类似问题的解决方案,并想出了这个,它可能对你有用(仅在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,就会破坏。而且,我知道这个问题很古老,但它可能会帮助其他偶然发现它的人。
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)
}