Ich möchte meine App in Swift Taschenlampe Funktionalität hinzufügen. Wie kann ich das tun?Wie schaltet man Taschenlampe schnell ein und aus?
Antwort
Update # 1: (torchActive
nicht den erwarteten Wert zurückkehrt, vielleicht, weil es modified gewesen)
Update # 2: für Swift 2.0
Um den Blitz von ein auf aus umzuschalten (nicht nur "on" wie in der Antwort von mad pig), können Sie die folgende Methode verwenden:
Ich habe verschachtelte Do-Catch-Blöcke verwendet, um den Vorschlag von Awesomeness aus den Kommentaren zu implementieren. Auch wenn try device.setTorchModeOnWithLevel(1.0)
fehlschlägt, ist das Gerät für die Konfiguration ordnungsgemäß entsperrt.
Ursprüngliche Antwort:
den Blitz Umschalten von Ein auf Aus (nicht nur "auf", wie in der Antwort ist verrückt Schwein), können Sie die folgende Methode verwenden:
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()
}
}
Wie so:
func turnTorchOn(){
let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
if device.hasTorch {
device.lockForConfiguration(nil)
device.setTorchModeOnWithLevel(1.0, error: nil)
device.unlockForConfiguration()
}
}
I habe für Swift @Lyndsey Scotts große Antwort aktualisiert 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)
}
}
Für Neulinge (wie mich) möchte ich hinzufügen, dass Sie "Import AVFoundation" oben in der View-Controller-Swift-Datei enthalten müssen. – dmcknight
Es funktionierte, danke :) –
FYI Ich aktualisierte meine Antwort für Swift 2.0 auch (die Antwort, die diese basierte) vor ein paar Monaten und im Gegensatz zu dieser Antwort, behandelt meine Antwort auch den Fall, wo try device.setTorchModeOnWithLevel (1.0) schlägt fehl. –
für schnelle 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")
}
}
}
genial. Vielen Dank. – Mikrasya
Aktualisiert Swift 4 Antwort:
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")
}
}
Dann es tatsächlich zu aktivieren oder zu deaktivieren, die Funktion aufrufen und in einem wahr oder falsch boolean passieren.
toggleTorch(on: true)
von toggleTorch(on: false)
bekam ich diese Antwort von Hacking with Swift, aber ihr Beispiel darin einen Fehler hatte.
Sie verwendeten AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo)
, aber dies erzeugt einen Fehler, defaultDevice
nicht existiert. So habe ich es zu AVCaptureDevice.default(for: AVMediaType.video)
Für Xcode 9.1, schnelle 4 (aktualisiert nicht abstürzen, wenn kein Brenner):
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)
}
}
}
}
Lösung für Swift 4 Mit Bedingung Fackel verfügbar ist oder nicht
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")
}
}
Die Lösung ist eine Kombination aus @Joshua Dance Und @Lance
- 1. Wie schaltet man ein Android-Gerät aus?
- 2. Taschenlampe - Wie ändert man den Tensortyp?
- 3. Wie blinkt die Taschenlampe?
- 4. Externe Stromquelle schaltet sich aus
- 5. Wie man theano.tensor zu numpy.array schaltet?
- 6. Wie man einen sticky header schaltet?
- 7. Wie lernt man C# schnell?
- 8. Wie löscht man viele Datensätze aus der SQL-Datenbank schnell?
- 9. Schaltet Hibernate createCriteria() Eingabe ein?
- 10. Lua/Taschenlampe Tisch umformen
- 11. In gcc, wie man die Warnung "--fmissive" stumm schaltet?
- 12. Servlet schaltet sich nach einiger Zeit aus
- 13. Taschenlampe Kontrolle in Marshmallow
- 14. Wie man Druck in Kakao, schnell einrichten?
- 15. Taschenlampe App Problem
- 16. AVAudioPlayer schaltet den iPod aus - wie funktioniert das?
- 17. Android: EditText schaltet die Tastatur automatisch, wie man stoppt?
- 18. Android Kamera (Taschenlampe) API zu langsam
- 19. Wie man ElasticSearch schnell neu indiziert?
- 20. Wie man schaltet DatabaseGeneratedOption.Identity on/off zur Laufzeit
- 21. Wie schnell Array aus großer Datei erstellen?
- 22. Wie Taschenlampe und Frontkamera zur gleichen Zeit in android
- 23. Wer weiß, wie man in Spree will_paginate schaltet?
- 24. SDL2: Wie schaltet man den Vollbildmodus richtig um?
- 25. Wie erkennt man redundante Durchflusskontrollblöcke schnell?
- 26. VBA Chart.SetSourceData schaltet meine Serie und Kategorien
- 27. Wie man Screenshots in Java schnell macht?
- 28. Android, wie wissen, ob Taschenlampe auf
- 29. LED-Taschenlampe auf xperia Z5
- 30. Taschenlampe: die Implementierung der Einbettungsschicht
Ich denke, der 'setTourchModeOnWithLevel'-Aufruf muss in einem eigenen try-Block sein, damit er das Gerät für die Konfiguration entsperren kann, falls etwas schief geht.do ' { versuchen device.setTorchModeOnWithLevel (1,0) } catch { device.unlockForConfiguration() } ' – Awesomeness
@Awesomeness Ja, ich stimme ... aktualisiert. –
@Awesomeness Ich habe Ihren Vorschlag implementiert, aber stattdessen einen verschachtelten do-catch-Block verwendet, da er eine Zeile weniger Code enthält ... Kein Aufruf von device.unlockForConfiguration() innerhalb und außerhalb des setTorchModeOnWithLevel (1.0) catch-Blocks. –