Проверьте, какая камера в данный момент используется в приложении iOS
Я пишу приложение, в котором есть пользовательский вид для фотографирования с помощью камеры, похожий на Apple AVCam. В нем я хочу, чтобы кнопка исчезала и снова появлялась для значка вспышки при каждом переключении камеры. IE При использовании передней камеры не должно быть кнопки вспышки, а при использовании задней - должна!
Мой код для этого на данный момент:
AVCaptureDevicePosition position = [[videoInput device] position];
if (position == AVCaptureDevicePositionBack) {
self.flashButton.hidden == YES;
}
Но это приводит к ошибке на videoInput, и я не уверен, почему... Любая документация, на которую вы могли бы направить меня или идеи для изменений в моем коде, была бы очень признательна!
РЕДАКТИРОВАТЬ
Просто в основном конкретно, почему возникает ошибка "использования необъявленного идентификатора" с этим кодом:
AVCaptureDevicePosition position = [[videoInput device] position];
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];
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)
}
Я искал решение для аналогичной проблемы и придумал это, и оно может работать для вас (только протестировано в 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, то оно сломается. И я знаю, что этот вопрос древний, но он может помочь кому-то еще, кто наткнется на него