2012-10-30 12 views
6

Pracuję nad prostą aplikacją, w której muszę włączyć tryb lampy błyskowej w aparacie fotograficznym, aby był stale włączony nie tylko podczas robienia zdjęć. A trybem działania powinien być aparat, a nie nagrywanie wideo. Czy to możliwe ? Jeśli tak, to w jaki sposób. Proszę o pomoc przy pomocy koduOtwieranie aparatu z trybem lampy błyskowej

+0

Ten link może mieć pomóc Ci. [Jak uzyskać dostęp do lampy błyskowej] [1] [1]: http://stackoverflow.com/questions/4233100/how-to-access-camera-flash-with-xcode- uiimagepickercontroller –

Odpowiedz

8

Możesz użyć poniższej metody do włączania i wyłączania lampy błyskowej.

- (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; 
    } 
} 

Można również użyć następującej metody wraz z wyświetlaczem aparatu,

- (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

@ Kod_cracker, czy tego szukasz? – iDev

+1

Należy sprawdzić, czy urządzenie ma funkcję palnika ;-) 'BOOL deviceHasFlash = ([urządzenie hasTorch] && [device hasFlash]);' – atxe

+0

@atxe, To prawda. To powinno być sprawdzone. Ale ponieważ planował użyć trybu flash, zakładam, że to już jest sprawdzone. – iDev

2

Służy do szybkiego 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) 
     } 
    } 
} 
Powiązane problemy