当使用带有Avoundation的前置摄像头时,Flash不起作用



我有一个使用Avoundation的相机应用程序。当用户拍照时,他们可以按下按钮以打开和关闭闪光灯。现在,这适用于后面摄像头,但我无法为前置摄像头工作。

不管我做什么,前面的摄像头都不会使用闪光灯。

这是我用来在按钮上打开和关闭闪存的代码:

-(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];
}
  }
}

尽管它是一个旧线程,对于当前想要使用开关白屏"模仿"前置摄像头"模仿"闪光的任何人都与设备的Hasflash属性相混淆:

iPhone 6s和6s以及前置摄像头是第一个 面向前面的iOS摄像机可以回应-Hasflash属性。

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

没有iOS设备在前侧闪烁。如果就像您说的那样,hasFlash方法将返回前置摄像头YES,那么这是一个错误。考虑向苹果提交雷达。您拥有说明问题的示例代码,因此您可以将其附加。

您确定正确调试吗?如果我在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的错误。

最新更新