Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to turn flashlight on/off using one button?

Tags:

ios

I can turn my flashlight on with one button and turn it off with another. But I want to do it with only one button. However, I don't have a framework which allows me to use the bool isSelected method. So I'm quite clueless on how to merge both functions together in one button.

Here's the code which works:

-(void)onButtonPressed 
{

AVCaptureDevice *flashLight = [AVCaptureDevice 
defaultDeviceWithMediaType:AVMediaTypeVideo];
if([flashLight isTorchAvailable] && [flashLight
isTorchModeSupported:AVCaptureTorchModeOn])
{
    BOOL success = [flashLight lockForConfiguration:nil];
    if(success){
        [flashLight setTorchMode:AVCaptureTorchModeOn];
        [flashLight unlockForConfiguration];
    }
}

}

I use this to turn the flashlight off.

-(void)offButtonPressed {

AVCaptureDevice *flashLight = [AVCaptureDevice
defaultDeviceWithMediaType:AVMediaTypeVideo];
if([flashLight isTorchAvailable] && [flashLight
isTorchModeSupported:AVCaptureTorchModeOn])
{
    BOOL success = [flashLight lockForConfiguration:nil];
    if(success){
        [flashLight setTorchMode:AVCaptureTorchModeOff];
        [flashLight unlockForConfiguration];
    }
}


}

I'm not particular about the way it's done. As long as the flashlight turns on with the first tap and turns off on the second, I couldn't care less about the method.

However, I'm using barbuttonitems made programatically, so please don't give me IBAction methods. I'd also appreciate it if the method suggested is as simple as possible, I think the way I'm using the flashlight right now is overly complex.

like image 884
Andrew Laeddis Avatar asked Jul 30 '12 17:07

Andrew Laeddis


1 Answers

For swift 3

@IBAction func toggleFlash() {
    if let device = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo), device.hasTorch {
    do {
        try device.lockForConfiguration()
        let torchOn = !device.isTorchActive
        try device.setTorchModeOnWithLevel(1.0)
        device.torchMode = torchOn ? .on : .off
        device.unlockForConfiguration()
    } catch {
        print("error")
    }
}

}

like image 126
Chuy47 Avatar answered Nov 03 '22 07:11

Chuy47