Вспышка не работает при использовании фронтальной камеры с 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.