Проверьте, какая камера используется в настоящее время в приложении iOS

Я пишу приложение, которое имеет специальное представление для съемки фотографий с помощью камеры, похожее на AVCam от Apple. В нем я хочу сделать так, чтобы кнопка пропадала и снова появлялась для значка вспышки каждый раз при переключении камеры. Т.е. при использовании фронтальной камеры кнопки вспышки быть не должно, а при использовании задней - должна!

Мой код для этого на данный момент:

  AVCaptureDevicePosition position = [[videoInput device] position];

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

Но он выдает ошибку на videoInput, и я не уверен, почему... Буду очень признателен за любую документацию, на которую вы могли бы меня направить, или идеи по изменению моего кода!

ИЗМЕНИТЬ

В основном конкретно, почему возникает ошибка «использование необъявленного идентификатора» с этим кодом:

AVCaptureDevicePosition position = [[videoInput device] position];

person falky    schedule 09.05.2013    source источник


Ответы (3)


Приведенный ниже код может помочь вам:

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];
person Impossible    schedule 09.05.2013
comment
Спасибо за вашу помощь, но я видел это в приложении AVCam. Я не знаю, как просто написать небольшой фрагмент кода в псевдокоде, например: если текущая камера = задняя камера {кнопка показа} else {кнопка скрытия} - person falky; 09.05.2013
comment
Каждый раз, когда я использую [устройство видеоввода], возникает ошибка. Поэтому мне было интересно, есть ли у вас какие-либо идеи или какой-либо другой способ определить, какая камера используется (либо «AVCaptureDevicePositionBack», либо «AVCaptureDevicePositionFront») моим UIView. Оттуда я скрою или покажу flashButton...? Спасибо за вашу помощь. Моя идея была примерно такой: ' AVCaptureDevicePosition currentCameraPosition = [[устройство видеоввода] position]; if ([currentCameraPosition isEqual:AVCaptureDevicePositionBack]){ self.flashButton.hidden = NO;} else {self.flashButton.hidden = YES; }' - person falky; 09.05.2013

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

person AppDever    schedule 05.12.2014

Свифт 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)

        }
person Brody Higby    schedule 08.05.2020