1

我有一个使用 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];
}
  }

}
4

3 回答 3

1

虽然它是一个旧线程,但对于当前想要通过切换白屏“模仿”前置摄像头上的 Flash 并且与设备的 hasFlash 属性混淆的任何人:

iPhone 6s 和 6s Plus 前置摄像头是第一款对 -hasFlash 属性响应“是”的前置 iOS 摄像头。

来源:https ://forums.developer.apple.com/thread/21694(段落:Retina Flash)

于 2017-05-26T10:00:15.907 回答
0

正面没有带闪光灯的 iOS 设备。如果就像你说的那样,该hasFlash方法返回YES前置摄像头,那么这是一个错误。考虑向 Apple提交雷达。您有说明问题的示例代码,因此您可以附加它。

于 2014-03-08T08:43:01.950 回答
0

你确定,你调试正确吗?如果我在我的 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!

所以没有前置摄像头闪光灯,也没有苹果的错误。

于 2014-03-08T08:47:53.153 回答