2013-03-01 168 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]; 
    } 

} 
相關問題