如何快速打开和closures手电筒?
我想在Swift中将手电function添加到我的应用程序中。 我怎么能这样做呢?
更新#1 🙁 torchActive
没有返回期望的值,也许是因为它已被修改 )
更新#2:对于Swift 2.0
要将闪光灯从开启切换到closures状态(不是像疯猪的答案那样“开启”),您可以使用以下方法:
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) } } }
我使用了嵌套的do-catch块来从注释中实现Awesomeness的build议。 这样,即使try device.setTorchModeOnWithLevel(1.0)
失败,设备正确解锁configuration。
原始答案:
要将闪光灯从开启切换到closures状态(不是像疯猪的答案那样“开启”),您可以使用以下方法:
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() } }
我更新了@Lyndsey Scott对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) } }
像这样:
func turnTorchOn(){ let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo) if device.hasTorch { device.lockForConfiguration(nil) device.setTorchModeOnWithLevel(1.0, error: nil) device.unlockForConfiguration() } }
快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") } } }
更新了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") } }
然后实际打开或closures它,调用函数并传入true或false布尔值。
toggleTorch(on: true)
toggleTorch(on: false)
我从Swift Hacking中得到了这个答案,但是他们的例子中有一个错误。
他们使用AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo)
但这会产生一个错误,说defaultDevice
不存在。 所以我把它改为AVCaptureDevice.default(for: AVMediaType.video)
对于xcode 9.1,swift 4(更新到不崩溃,如果没有火炬):
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) } } } }