2010-07-08 7 views
3

Je crée une application qui me permet d'assembler des images dans une scène panoramique. Je veux être en mesure d'activer la LED Flash sur l'iPhone 4 par programmation.Comment utiliser AVCaptureFlashMode

Comment est-ce que je peux faire ceci?

J'ai lu la documentation et découvert que je dois utiliser AVCaptureFlashMode

, mais je ne peux pas comprendre comment l'utiliser 2?

toute aide serait appréciée.


Code mis à jour ci-dessous. Merci SIF!

 
NSError* error = nil; 
    NSLog(@"Setting up LED"); 

    if([captDevice hasTorch] == NO) 
    { 
     NSLog(@"Error: This device doesnt have a torch"); 
    } 
    if([captDevice isTorchModeSupported:AVCaptureTorchModeOn] == NO) 
    { 
     NSLog(@"Error: This device doesnt support AVCaptureTorchModeOn"); 
    } 

    AVCaptureSession* captureSession = [[AVCaptureSession alloc] init]; 
    AVCaptureDeviceInput* videoInput = [[AVCaptureDeviceInput alloc] initWithDevice:captDevice error:&error]; 
    AVCaptureVideoDataOutput* videoOutput = [[AVCaptureVideoDataOutput alloc] init]; 

    if (videoInput && videoOutput) 
    { 
     [captureSession addInput:videoInput]; 
     [captureSession addOutput:videoOutput]; 
     if([captDevice lockForConfiguration:&error]) 
     { 
      if (flag == YES) { 
       captDevice.torchMode = AVCaptureTorchModeOn; 
      } else { 
       captDevice.torchMode = AVCaptureTorchModeOff; 
      }   
      [captDevice unlockForConfiguration]; 
     } 
     else 
     { 
      NSLog(@"Could not lock device for config error: %@", error); 
     } 
     [captureSession startRunning]; 
    } 
    else 
    { 
     NSLog(@"Error: %@", error); 
    } 

Comment l'éteindre?

+0

S'il vous plaît voir ma réponse ici pour référence future sur la façon de activer/désactiver: http://stackoverflow.com/questions/3190034/turn-on-torch-flash-on-iphone-4/3367424# 3367424 – iwasrobbed

Répondre

7
AVCaptureDevice* d = nil; 

// find a device by position 
NSArray* allDevices = [AVCaptureDevice devices]; 
for (AVCaptureDevice* currentDevice in allDevices) { 
    if (currentDevice.position == AVCaptureDevicePositionBack) { 
    d = currentDevice; 
    } 
} 

// at this point, d may still be nil, assuming we found something we like.... 

NSError* err = nil; 
BOOL lockAcquired = [d lockForConfiguration:&err]; 

if (!lockAcquired) { 
    // log err and handle... 
} else { 
    // flip on the flash mode 
    if ([d hasFlash] && [d isFlashModeSupported:AVCaptureFlashModeOn]) { 
     [d setFlashMode:AVCaptureFlashModeOn]; 
    } 

    [d unlockForConfiguration]; 
} 
+0

Ai-je besoin d'initialiser init AVCaptureDevice? –

+0

non, vous devriez pouvoir en obtenir un de '[dispositifs AVCaptureDevice]' – slf

+0

@SIF Pouvez-vous s'il vous plaît mettre à jour votre code d'échantillon pour montrer comment le flash est allumé? S'il vous plaît ne supposez pas que j'ai obtenu le AVCaptureDevice. Que diriez-vous de la méthode lockConfiguration? –