2012-10-30 1 views
6

Sto sviluppando una semplice app in cui ho bisogno di attivare continuamente la modalità flash della fotocamera per catturare l'immagine. E la modalità di funzionamento dovrebbe essere la videocamera e non la registrazione video. È possibile ? Se è così come. Aiutatemi con qualche codiceCome aprire la fotocamera con la modalità flash

+0

Questo link potrebbe avere Aiutarti. [Come accedere flash della fotocamera] [1] [1]: http://stackoverflow.com/questions/4233100/how-to-access-camera-flash-with-xcode- uiimagepickercontroller –

risposta

8

È possibile utilizzare il metodo seguente per attivare e disattivare il flash della fotocamera.

- (void)toggleFlashlight 
{ 
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 

    if (device.torchMode == AVCaptureTorchModeOff) 
    { 
    // Create an AV session 
    AVCaptureSession *session = [[AVCaptureSession alloc] init]; 

    // Create device input and add to current session 
    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error: nil]; 
    [session addInput:input]; 

    // Create video output and add to current session 
    AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init]; 
    [session addOutput:output]; 

    // Start session configuration 
    [session beginConfiguration]; 
    [device lockForConfiguration:nil]; 

    // Set torch to on 
    [device setTorchMode:AVCaptureTorchModeOn]; 

    [device unlockForConfiguration]; 
    [session commitConfiguration]; 

    // Start the session 
    [session startRunning]; 

    // Keep the session around 
    [self setAVSession:session]; 

    [output release]; 
    } 
    else 
    { 
    [AVSession stopRunning]; 
    [AVSession release], 
    AVSession = nil; 
    } 
} 

È inoltre possibile utilizzare il seguente metodo insieme al display della fotocamera,

- (void) toggleFlashlight { 

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

     [device lockForConfiguration:nil]; 
     if (device.torchMode == AVCaptureTorchModeOff) 
     { 
      [device setTorchMode:AVCaptureTorchModeOn]; 
      [device setFlashMode:AVCaptureFlashModeOn]; 

     } 
     else 
     { 
      [device setTorchMode:AVCaptureTorchModeOff]; 
      [device setFlashMode:AVCaptureFlashModeOff]; 

     } 
     [device unlockForConfiguration]; 
    } 
} 
} 

Source

+0

@The_code_cracker, è questo ciò che stai cercando? – iDev

+1

Assicuratevi di controllare che il dispositivo abbia capacità torcia ;-) 'BOOL deviceHasFlash = ([dispositivo hasTorch] && [dispositivo hasFlash]);' – atxe

+0

@atxe, è vero. Questo dovrebbe essere controllato. Ma dal momento che stava pensando di utilizzare per la modalità flash, presumo che sia già stato controllato. – iDev

2

Usare questo per Swift 4

func toggleFlash() { 
    guard let device = AVCaptureDevice.default(for: AVMediaType.video) 
     else {return} 

    if device.hasTorch { 
     do { 
      try device.lockForConfiguration() 
      if device.torchMode == AVCaptureDevice.TorchMode.on { 
       device.torchMode = AVCaptureDevice.TorchMode.off 
        //AVCaptureDevice.TorchModeAVCaptureDevice.TorchMode.off 
      } else { 
       do { 
        try device.setTorchModeOn(level: 1.0) 
       } catch { 
        print(error) 
       } 
      } 
      device.unlockForConfiguration() 
     } catch { 
      print(error) 
     } 
    } 
}