Как включить и выключить фонарик в swift?
Я хотел бы добавить функциональность фонарика в мое приложение в Swift. Как я могу это сделать?
8 ответов
обновление #1: (torchActive
не возвращает ожидаемое значение; возможно, потому, что это было изменен)
обновление #2: Для Swift 2.0
чтобы переключить вспышку от включения до выключения (а не только "вкл", как в ответе mad pig), вы можете использовать следующий метод:
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 из комментариев. Сюда, даже если try device.setTorchModeOnWithLevel(1.0)
сбой, устройство правильно разблокировано для конфигурации.
оригинальный ответ:
чтобы переключить вспышку от включения до выключения (а не только "вкл", как в ответе mad pig), вы можете использовать следующий метод:
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)
}
}
Обновлено 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")
}
}
затем, чтобы фактически включить или выключить его, вызовите функцию и передайте true или false boolean.
toggleTorch(on: true)
of toggleTorch(on: false)
я получил этот ответ от взлом с помощью Swift, однако в их примере была ошибка.
они AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo)
но это приводит к ошибке, говоря defaultDevice
не существует. Поэтому я изменил его на AVCaptureDevice.default(for: AVMediaType.video)
вот так:
func turnTorchOn(){
let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
if device.hasTorch {
device.lockForConfiguration(nil)
device.setTorchModeOnWithLevel(1.0, error: nil)
device.unlockForConfiguration()
}
}
для swift 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")
}
}
}
для 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)
}
}
}
}
Решение Swift 4 С Условием факел или нет
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")
}
}
решение является комбинацией @Joshua Dance и @Lance
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)
}
}
}