2010-07-15 12 views

risposta

15

Usa la seguente:

AVCaptureSession * session = [[AVCaptureSession alloc] init]; 

[session beginConfiguration]; 

AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 

if ([device hasTorch] && [device hasFlash]){ 
[device lockForConfiguration:nil]; 
[device setTorchMode:AVCaptureTorchModeOn]; 
[device setFlashMode:AVCaptureFlashModeOn]; 
[device unlockForConfiguration]; 

AVCaptureDeviceInput * flashInput = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil]; 
if (flashInput){ 
    [session addInput:flashInput]; 
} 
    AVCaptureVideoDataOutput * output = [[AVCaptureVideoDataOutput alloc] init]; 
    [session addOutput:output]; 
     [output release]; 
    [session commitConfiguration]; 
    [session startRunning]; 
} 
[self setTorchSession:session]; 
[session release]; 

(Da un discussion su iPhoneDevSDK)

+0

Grazie, così ho aggiunto un pulsante nel viewcontroller.xib in interfacebuilder. Come faccio a far partire il pulsante e fermare la torcia? –

+0

Crea un IBOutlet per IBAction e collegalo al selettore del pulsante. Quindi, nell'IBAction, a seconda se il LED è già acceso, chiamare il codice o chiamare una versione modificata del codice con tutti gli on sostituiti con off. – jrtc27

+0

Hai controllato il mio altro post? Ho aggiunto IBOutlet e IBActon ma non so come aggiungere il mio codice al pulsante. Puoi dare un'occhiata e aiutarmi e mostrarmi come aggiungere il codice al pulsante. So che ho bisogno di cambiare; [device setTorchMode: AVCaptureTorchModeOn]; [device setFlashMode: AVCaptureFlashModeOn]; a [dispositivo setTorchMode: AVCaptureTorchModeOff]; [device setFlashMode: AVCaptureFlashModeOff]; Potete guardare il mio codice in altri post e mi mostra come fare questo, è possibile inviare me holmes2870 @ yahoo.com Sono nuovo di questo in modo da avere pazienza ... ringrazio David H –

29

Ecco una versione più breve è ora possibile utilizzare per accendere il LED acceso o spento:

- (void)torchOnOff: (BOOL) onOff 
{ 
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
    if ([device hasTorch]) { 
     [device lockForConfiguration:nil]; 
     [device setTorchMode: onOff ? AVCaptureTorchModeOn : AVCaptureTorchModeOff]; 
     [device unlockForConfiguration]; 
    } 
} 

AGGIORNAMENTO: (marzo 2015)

È inoltre possibile impostare la luminosità della torcia:

- (void)setTorchToLevel:(float)torchLevel 
{ 
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
    if ([device hasTorch]) { 
     [device lockForConfiguration:nil]; 
     if (torchLevel <= 0.0) { 
      [device setTorchMode:AVCaptureTorchModeOff]; 
     } 
     else { 
      if (torchLevel >= 1.0) 
       torchLevel = AVCaptureMaxAvailableTorchLevel; 
      BOOL success = [device setTorchModeOnWithLevel:torchLevel error:nil]; 
     } 
     [device unlockForConfiguration]; 
    } 
} 
+1

È necessario avere la sessione in esecuzione se si utilizza questo codice nelle versioni iOS precedenti alla 5.0 – mahboudz

+0

Questo funziona su iOS 5.1, la risposta precedente no. –

+0

Potresti commentare quali versioni funziona? –

Problemi correlati