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

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!

そのため、フロントカメラのフラッシュはなく、Apple によるバグもありません。

于 2014-03-08T08:47:53.153 に答える