Chciałbym dodać funkcjonalność latarki do mojej aplikacji w Swift. Jak mogę to zrobić?Jak włączać i wyłączać latarkę?
Odpowiedz
Aktualizacja # 1: (torchActive
nie zwraca wartość oczekiwaną, być może dlatego, że było modified)
Aktualizacja # 2: Dla Swift 2.0
Aby przełączyć lampę błyskową z położenia na wyłączony (nie tylko "włączony" jak w odpowiedzi na szaloną świnię), można użyć następującej metody:
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)
}
}
}
Użyłem zagnieżdżonych bloków catch-do do realizacji sugestii Awesomeness z komentarzy. W ten sposób, nawet jeśli try device.setTorchModeOnWithLevel(1.0)
ulegnie awarii, urządzenie zostanie poprawnie odblokowane w celu konfiguracji.
Oryginalny odpowiedź:
Aby włączyć lampę błyskową z włączenia na wyłączenie (nie tylko „na”, jak w odpowiedzi szalonego świni), można użyć następującej metody:
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()
}
}
tak:
func turnTorchOn(){
let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
if device.hasTorch {
device.lockForConfiguration(nil)
device.setTorchModeOnWithLevel(1.0, error: nil)
device.unlockForConfiguration()
}
}
I już aktualizowany wielką odpowiedź @Lyndsey Scotta dla 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)
}
}
Dla początkujących (jak ja), chciałbym dodać, że musisz dodać "import AVFoundation" w górnej części pliku Swift kontrolera widoku. – dmcknight
To zadziałało, dziękuję :) –
FYI Zaktualizowałem również swoją odpowiedź dla Swift 2.0 (odpowiedź na której opierał się) kilka miesięcy temu iw przeciwieństwie do tej odpowiedzi, moja odpowiedź zajmuje się również przypadkiem, w którym wypróbowano urządzenie.setTorchModeOnWithLevel (1.0) zawiedzie. –
dla szybkiej 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")
}
}
}
niesamowite. dzięki. – Mikrasya
Updated Swift 4 Odpowiedź:
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")
}
}
Wtedy faktycznie je włączyć lub wyłączyć, należy wywołać funkcję i przechodzą w prawdziwą lub fałszywą logiczną.
toggleTorch(on: true)
z toggleTorch(on: false)
dostałem taką odpowiedź od Hacking with Swift, jednak ich przykładem miałem błąd w nim.
Użyto AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo)
, ale powoduje to błąd informujący, że defaultDevice
nie istnieje. Więc zmieniłem go AVCaptureDevice.default(for: AVMediaType.video)
Dla Xcode 9.1, Swift 4 (aktualizacja nie upaść, jeśli nie latarka):
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)
}
}
}
}
rozwiązanie dla Swift 4 z Warunkiem latarka jest dostępna lub nie
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")
}
}
Rozwiązanie to Kombinacja @Joshua Dance I @Lance
- 1. Android włączać i wyłączać GPS
- 2. Jak włączać i wyłączać automatyczną jasność? (nie powtórz)
- 3. Jak włączać i wyłączać autokorektęType dla istniejącego UITextView
- 4. Jak włączać i wyłączać monitor z poziomu aplikacji Java?
- 5. OrbitControls - Czy mogę dynamicznie włączać/wyłączać powiększanie?
- 6. Jak dynamicznie włączać/wyłączać łącza za pomocą jQuery?
- 7. Jak włączać i wyłączać warstwy map Google za pomocą pól wyboru?
- 8. Jak dynamicznie wyłączać dyrektywę ui-sortable w kątowym-ui
- 9. Jak programowo usunąć (nie wyłączać) przycisk z TinyMCE?
- 10. Jak ustawić ramkę jFrame zawsze na wierzchu i włączać ostrość, dopóki nie zostanie ona zamknięta?
- 11. Jak debugować program Java bez korzystania z IDE?
- 12. Po co włączać kompilacje String na dwa przełączniki?
- 13. Wybierz i wyłączać poszczególne pola wejściowego w postaci, owinięte w tabeli w jQuery
- 14. Jak programowo wybierać pomiędzy bluetooth i mikrotelefonem dla audio audio
- 15. HTML5 Wyświetlanie dźwięku tylko odtwarzanie przycisków pauzy i wyciszenia
- 16. Przejście z Zsh na bash na OSX iz powrotem?
- 17. Android: Utwórz przycisk przełączania z obrazem i bez tekstu
- 18. Highcharts - Jak programowo przełączanie elementów legendy i określić, które elementy są zaznaczone
- 19. Jak ukryć hasła .env w wynikach whoopów Laravel?
- 20. state_checked nie przełączać ImageView i wyłączanie
- 21. jak napisać edytor tekstu w C++
- 22. Sposób włączania i wyłączania pola tekstowego w jquery
- 23. jak wyłączyć sprawdzanie składni w trybie js2 na świecie w spacewakach
- 24. Jak uruchomić/zatrzymać udostępnianie Internetu za pomocą AppleScript
- 25. Jak mogę przełączyć zawijanie wyrazów w Visual Studio?
- 26. tworzyć animowane przycisk
- 27. Czy w tym samym czasie można aktywować klawiaturę fizyczną i klawiaturę programową?
- 28. Jak przełączać komentarze roxygen w Rstudio?
- 29. Jak mogę zresetować uprawnienie dostępu do kontaktu, aby system OS X zapytał ponownie?
- 30. Jak włączyć funkcję latarki w telefonie iPhone 4 iOS 6 na początku aplikacji z preferencjami plist
Myślę, że wywołanie 'setTourchModeOnWithLevel' musi być w swoim własnym bloku try, aby mógł odblokować urządzenie w celu konfiguracji w przypadku, gdyby coś poszło nie tak. ' zrobić { spróbować device.setTorchModeOnWithLevel (1.0) } catch { device.unlockForConfiguration() } ' – Awesomeness
@Awesomeness Tak, zgadzam się ... zaktualizuje. –
@Awesomeness Zaimplementowałem twoją sugestię, ale użyłem zagnieżdżonego bloku "do-catch", ponieważ jest to jeden mniejszy wiersz kodu ... Nie ma potrzeby wywoływania device.unlockForConfiguration() zarówno w bloku blokującym setTorchModeOnWithLevel (1.0), jak i poza nim. –