Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to turn flashlight ON and OFF in swift?

I'd like to add flashlight functionality to my app in Swift. How can I go about doing that?

like image 379
Lachtan Avatar asked Nov 29 '14 21:11

Lachtan


People also ask

How do I turn on my flashlight shortcut?

Open the Settings App, then go to System → Gestures → Quick Tap. Turn on the feature by pressing the Use Quick Tap button. Scroll down, then tap the Toggle flashlight option.


1 Answers

Update #1: (torchActive isn't returning the expected value; perhaps because it's been modified)

Update #2: For Swift 2.0

To toggle the flash from on to off (not just "on" as in mad pig's answer), you can use the following method:

func toggleFlash() {     let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)     if (device.hasTorch) {         do {             try device.lockForConfiguration()             if (device.torchMode == AVCaptureTorchMode.On) {                 device.torchMode = AVCaptureTorchMode.Off             } else {                 do {                     try device.setTorchModeOnWithLevel(1.0)                 } catch {                     print(error)                 }             }             device.unlockForConfiguration()         } catch {             print(error)         }     } } 

I used nested do-catch blocks to implement Awesomeness's suggestion from the comments. This way, even if try device.setTorchModeOnWithLevel(1.0) fails, the device is properly unlocked for configuration.

Update #3: For Swift 4:

(I edited the code a bit to my personal taste)

func toggleFlash() {     guard let device = AVCaptureDevice.default(for: AVMediaType.video) else { return }     guard device.hasTorch else { return }      do {         try device.lockForConfiguration()          if (device.torchMode == AVCaptureDevice.TorchMode.on) {             device.torchMode = AVCaptureDevice.TorchMode.off         } else {             do {                 try device.setTorchModeOn(level: 1.0)             } catch {                 print(error)             }         }          device.unlockForConfiguration()     } catch {         print(error)     } } 

Original answer:

To toggle the flash from on to off (not just "on" as in mad pig's answer), you can use the following method:

func toggleFlash() {     let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)     if (device.hasTorch) {         device.lockForConfiguration(nil)         let torchOn = !device.torchActive         device.setTorchModeOnWithLevel(1.0, error: nil)         device.torchMode = torchOn ? AVCaptureTorchMode.On : AVCaptureTorchMode.Off         device.unlockForConfiguration()     } } 
like image 77
Lyndsey Scott Avatar answered Sep 21 '22 10:09

Lyndsey Scott