2013-03-01 165 views
1

更新:我知道如何打开/关闭相机闪光灯。我想知道的是,如果相机闪光灯已经已经点燃或没有。如何知道相机闪光灯是否已经点亮(iOS)?

我想知道iPhone上的照相机闪光灯是否点亮,但我还没有找到UIImagePickerController中的任何方法,它允许我这样做。我知道我们可以得到cameraFlashMode。但是我想知道相机闪光灯是否已经点亮。

例如,如果模式为UIImagePickerControllerCameraFlashModeAuto,则在执行某些操作之前,相机闪光灯可能会点亮或不点亮,并且我想知道相机闪光灯的状态。

+0

http://stackoverflow.com/questions/5882829/how-to-turn-the-iphone-camera-flash-on -off – iPatel 2013-03-01 10:08:10

回答

0

您可以使用下面的代码来查找

#import <AVFoundation/AVFoundation.h> 


- (void) turnTorchOn: (bool) on { 

Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice"); 
if (captureDeviceClass != nil) { 
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
if ([device hasTorch] && [device hasFlash]){ 

    [device lockForConfiguration:nil]; 
    if (on) { 
     NSLog(@"Torch is ON"); 
    } else { 
     NSLog(@"Torch is OFF"); 

    } 
    [device unlockForConfiguration]; 
} 
} 
} 

编码愉快...!

+1

嗨,毗湿奴。谢谢你的回复,但我不太明白你得到了闪存的状态。如果(on){@“Torch is ON”},但这里的“on”被传入...另一点是,方法的名称turnTorchOn,似乎应该使用此方法打开/关闭闪光灯,不能获得闪光灯的开/关状态。我对吗? – Mathieu 2013-03-04 14:35:43

0

令人吃惊,这是真的没有答案是回答甚至不回答这个问题的第一人......

func torchButtonPressed() { 
    // 
    let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo) 
    do { 
     try device.lockForConfiguration() 
    } catch { 
     return 
    } 
    if device.torchMode == AVCaptureTorchMode.Off { 
     do { 
      device.torchMode = AVCaptureTorchMode.On 
      try device.setTorchModeOnWithLevel(AVCaptureMaxAvailableTorchLevel) 
     } catch { 
      print("no torch") 
      return 
     } 

    } else { 
     device.torchMode = AVCaptureTorchMode.Off 
    } 
    device.unlockForConfiguration() 
} 
0

我经历了相同的问题,因为你去了。

iOS支持两种模式 - 闪光灯&火炬。下面的代码检查是否每个都可用&然后如果打开或关闭它取决于你打电话给谁。它也会检查灯是否已经打开/关闭。

强制闪光 -

-(void)flashOn { 
Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice"); 
if (captureDeviceClass != nil) { 
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
    [device lockForConfiguration:nil]; 

    if ([device hasFlash]) { 
     if ([device flashMode] == AVCaptureFlashModeOff) { 
      [device setFlashMode:AVCaptureFlashModeOn]; 
     } 
    } 

    if ([device hasTorch]) { 
     if ([device torchMode] == AVCaptureTorchModeOff) { 
      [device setTorchMode:AVCaptureTorchModeOn]; 
     } 
    } 

    [device unlockForConfiguration]; 
    } 
} 

闪光灯关 -

-(void)flashOff { 
Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice"); 
if (captureDeviceClass != nil) { 
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
    [device lockForConfiguration:nil]; 

    if ([device hasFlash]) { 
     if ([device flashMode] == AVCaptureFlashModeOn) { 
      [device setFlashMode:AVCaptureFlashModeOff]; 
     } 
    } 

    if ([device hasTorch]) { 
     if ([device torchMode] == AVCaptureTorchModeOn) { 
      [device setTorchMode:AVCaptureTorchModeOff]; 
     } 
    } 

    [device unlockForConfiguration]; 
    } 

} 
相关问题