Вспышка не работает при использовании фронтальной камеры с AVFoundation

У меня есть приложение камеры, которое использует AVFoundation. Когда пользователь делает фотографию, он может нажать кнопку, чтобы включить или выключить вспышку. Прямо сейчас это работает отлично для камеры заднего вида, но я не могу заставить это работать для камеры переднего обзора.

Что бы я ни делал, фронтальная камера не будет использовать вспышку.

Вот код, который я использую для включения и выключения вспышки при нажатии кнопки:

-(IBAction)toggleFlash {

NSLog(@"Toggle flash button has been pressed");

NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
for (AVCaptureDevice *device in devices) {
    if ([device hasFlash] == YES) {

        NSLog(@"Current Device Flash Mode: %d", device.flashMode);


        [device lockForConfiguration:nil];


        if(device.flashMode == 0) {

            [device setFlashMode:AVCaptureFlashModeOn];

            NSLog(@"New device flash mode: %d", device.flashMode);



        } else if (device.flashMode == 1) {

            [device setFlashMode:AVCaptureFlashModeOff];

            NSLog(@"New device flash mode: %d", device.flashMode);


        } else if (device.flashMode == 2) {

            [device setFlashMode:AVCaptureFlashModeOn];


        }

        [device unlockForConfiguration];
}
  }

}

3 ответа

Хотя это старый поток, для тех, кто в настоящее время хочет "имитировать" вспышку на передней камере с помощью переключающегося белого экрана и путается со свойством hasFlash устройства:

Фронтальные камеры iPhone 6s и 6s Plus являются первыми фронтальными камерами iOS, которые отвечают ДА на свойство -hasFlash.

Источник: https://forums.developer.apple.com/thread/21694 (Абзац: Retina Flash)

На лицевой стороне нет устройства iOS со вспышкой. Если это так, как вы сказали, что hasFlash метод возвращает YES для фронтальной камеры это ошибка. Подумайте о том, чтобы подать радар в Apple. У вас есть пример кода, который иллюстрирует проблему, поэтому вы можете просто прикрепить ее.

Вы уверены, что правильно отлажены? Если я использую сокращенную версию вашего кода на моем iPhone:

- (IBAction)button:(id)sender
{
    NSLog(@"Toggle flash button has been pressed");

    NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];

    int i = 0;

    for (AVCaptureDevice *device in devices)
    {
        if ([device hasFlash] == YES)
            NSLog(@"Device %d has flash!", i);

        else
            NSLog(@"Device %d has no flash!", i);
        ++i;
    }

}

Я получаю этот результат:

2014-03-08 09:45:48.551 test[12162:60b] Toggle flash button has been pressed
2014-03-08 09:45:48.597 test[12162:60b] Device 0 has flash!
2014-03-08 09:45:48.600 test[12162:60b] Device 1 has no flash!

Так что нет вспышки фронтальной камеры, и нет ошибки Apple.

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