Проверьте, какая камера в данный момент используется в приложении 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, то оно сломается. И я знаю, что этот вопрос древний, но он может помочь кому-то еще, кто наткнется на него

Другие вопросы по тегам