prender plus linterna funciona esta enciende encender donde como apaga agitando ios swift xcode6 flashlight

ios - plus - linterna iphone 8



¿Cómo encender y apagar la linterna rápidamente? (8)

Me gustaría agregar la funcionalidad de linterna a mi aplicación en Swift. ¿Cómo puedo hacer eso?


Actualicé la gran respuesta de @Lyndsey Scott para Swift 2.0

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


Al igual que:

func turnTorchOn(){ let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo) if device.hasTorch { device.lockForConfiguration(nil) device.setTorchModeOnWithLevel(1.0, error: nil) device.unlockForConfiguration() } }


Para veloz 3

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") } } }


Para xcode 9.1, swift 4 (actualizado para no fallar si no hay antorcha):

func toggleFlash() { let device = AVCaptureDevice.default(for: AVMediaType.video) if (device != nil) { if (device!.hasTorch) { 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) } } } }


Respuesta actualizada de Swift 4:

func toggleTorch(on: Bool) { guard let device = AVCaptureDevice.default(for: AVMediaType.video) else {return} if device.hasTorch { do { try device.lockForConfiguration() if on == true { device.torchMode = .on } else { device.torchMode = .off } device.unlockForConfiguration() } catch { print("Torch could not be used") } } else { print("Torch is not available") } }

Luego, para activarlo o desactivarlo, llame a la función y pase un booleano verdadero o falso.

toggleTorch(on: true) de toggleTorch(on: false)

Recibí esta respuesta de Hacking con Swift , sin embargo, su ejemplo tenía un error.

Utilizaron AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo) pero esto produce un error que defaultDevice que el defaultDevice no existe. Así que lo cambié a AVCaptureDevice.default(for: AVMediaType.video)


Solución para Swift 4 Con Condition Torch está disponible o no

func flashlight() { guard let device = AVCaptureDevice.default(for: AVMediaType.video) else{ return } if (device.hasTorch) { do { try device.lockForConfiguration() if (device.torchMode == .on) { device.torchMode = .off } else { device.torchMode = .on } device.unlockForConfiguration() } catch { print("Torch could not be used") print(error) } } else{ print("Torch is not available") } }

La solución es una combinación de @Joshua Dance And


Actualización n. ° 1: ( torchActive no devuelve el valor esperado, tal vez porque ha sido modified )

Actualización n. ° 2: para Swift 2.0

Para alternar el flash de encendido a apagado (no solo "encendido" como en la respuesta del cerdo loco), puede usar el siguiente método:

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) } } }

Utilicé bloques anidados de catch para implementar la sugerencia de Awesomeness a partir de los comentarios. De esta forma, incluso si try device.setTorchModeOnWithLevel(1.0) falla, el dispositivo está desbloqueado correctamente para la configuración.

Respuesta original:

Para alternar el flash de encendido a apagado (no solo "encendido" como en la respuesta del cerdo loco), puede usar el siguiente método:

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


Swift 4.1 @objc func Flash() { let device = AVCaptureDevice.default(for: AVMediaType.video) if (device?.hasTorch)! { 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) } } }