Die Punkte zum Erstellen einer Timer-App werden in mehreren Artikeln veröffentlicht. Dieser Artikel beschreibt die Implementierung von Alarmen und Vibrationen, die ausgelöst werden, wenn der Timer-Countdown Null erreicht.
Sie können den Beispielcode unter der folgenden Git-Repository-URL sehen. https://github.com/msnsk/Qiita_Timer.git
Importieren Sie eine neue Bibliothek namens AudioToolbox in TimeManager. Die AudioToolbox-Bibliothek enthält Klassen, Eigenschaften und Methoden, hauptsächlich für Soundeffekte, mit denen Sie den Alarm unterbrechen können, wenn der Countdown des Timers Null erreicht.
TimeManager.swift
import SwiftUI
import AudioToolbox //Zusätzlicher Import
class TimeManager: ObservableObject {
//(Eigenschaften und Methoden weggelassen)
}
Um eine in AudioToolbox enthaltene Tonquelle zu verwenden, müssen Sie die SystemSoundID dieser Tonquelle angeben. SystemSoundID ist ein Datentyp, UInt32-Typealias.
Erstellen Sie daher eine Eigenschaft für diesen Datentyp in der TimeManager-Klasse, hängen Sie den @ Published-Eigenschaften-Wrapper an und weisen Sie die ID der Soundquelle zu, die Sie standardmäßig als Wert angeben möchten.
Die folgenden Ressourcen helfen Ihnen herauszufinden, welche ID was klingt. https://github.com/TUNER88/iOSSystemSoundsLibrary
Ich habe die Elemente dieser Ressource einzeln überprüft, aber es scheint sich um den Benachrichtigungston zu handeln, der in recht alten Modellen von iOS-Geräten verwendet wird. Wir konnten keine Informationen zum Benachrichtigungston finden, der bei neueren Modellen standardmäßig verwendet wird. Bitte beachten Sie. (Wenn jemand weiß, würde ich es begrüßen, wenn Sie einen Kommentar abgeben könnten)
Der Name der Eigenschaft war soundID, und ich persönlich hatte das Gefühl, dass es sich um eine komfortable Soundquelle handelt. Deshalb habe ich 1151 als ID zugewiesen.
TimeManager.swift
import SwiftUI
import AudioToolbox //Zusätzlicher Import
class TimeManager: ObservableObject {
//(Andere Eigenschaften weggelassen)
//Speichert die Standard-Sound-ID mit dem Datentyp für die Verwendung der in der Audio Toolbox gespeicherten Soundquelle
@Published var soundID: SystemSoundID = 1151
//(Methode weggelassen)
}
Importieren Sie in Schritt 1 die AudioToolbox-Bibliothek in die Hauptansicht sowie in den TimeManager.
Der Grund für den Import von AudioToolbox ist, dass Sie eine Methode in MainView schreiben müssen, die eine Warnung ausgibt, wenn der Countdown-Timer tatsächlich 0 erreicht, und diese Methode in AudioToolbox enthalten ist.
MainView.swift
import SwiftUI
import AudioToolbox //Zusätzlicher Import
struct MainView: View {
//(Eigenschaften und Methoden weggelassen)
}
Wenn im verbleibenden .onReceive-Modifikator von ZStack von MainView die verbleibende Zeit mehr als 0 oder weniger als 0 beträgt, wurde bereits eine bedingte Verzweigung durch die if-else-Anweisung durchgeführt. Fügen Sie in der else-Anweisung eine Methode zum Auslösen des Alarmtons hinzu (wenn die verbleibende Zeit 0 oder weniger beträgt).
Das Verfahren wird wie folgt beschrieben. Geben Sie im ersten Argument die soundID-Eigenschaft der TimeManager-Klasse an, die zuvor in Schritt 2 vorbereitet wurde. Das zweite Argument kann Null sein.
AudioServicesPlayAlertSoundWithCompletion(self.timeManager.soundID, nil)
MainView.swift
struct MainView: View {
//(Eigenschaft weggelassen)
var body: some View {
ZStack {
//(Kürzung)
}
//Führt den Code im Abschluss aus, der von einem Timer ausgelöst wird, der jedes Mal aktiviert wird (1 Sekunde).
.onReceive(timeManager.timer) { _ in
//Der Timer-Status ist.Mach nichts außer rennen
guard self.timeManager.timerStatus == .running else { return }
//Wenn die verbleibende Zeit größer als 0 ist
if self.timeManager.duration > 0 {
//Von der verbleibenden Zeit-Ich mache
self.timeManager.duration -= 1
//Wenn die verbleibende Zeit 0 oder weniger beträgt
} else {
//Timer-Status.Wechseln Sie zu gestoppt
self.timeManager.timerStatus = .stopped
//Alarm auslösen
AudioServicesPlayAlertSoundWithCompletion(self.timeManager.soundID, nil)
}
}
}
}
Neben dem Alarmton befindet sich die Implementierung von Vibrationen. Dies verwendet auch die gleiche Methode wie die Alarmtonaktivierung. Das Argument ändert sich.
Im Argument wird der Wert von soundID für Vibration, der von der Eigenschaft kSystemSoundID_Vibrate erhalten wird, in den Datentyp SystemSoundID konvertiert und übergeben.
AudioServicesPlayAlertSoundWithCompletion(SystemSoundID(kSystemSoundID_Vibrate)) {}
MainView.swift
struct MainView: View {
//(Eigenschaft weggelassen)
var body: some View {
ZStack {
//(Kürzung)
}
.onReceive(timeManager.timer) { _ in
guard self.timeManager.timerStatus == .running else { return }
if self.timeManager.duration > 0 {
//(Kürzung)
} else {
//(Kürzung)
//Alarm auslösen
AudioServicesPlayAlertSoundWithCompletion(self.timeManager.soundID, nil)
//Vibration aktivieren
AudioServicesPlayAlertSoundWithCompletion(SystemSoundID(kSystemSoundID_Vibrate)) {}
}
}
}
}
Nächstes Mal erstellen wir einen Einstellungsbildschirm, der Alarm und Vibration ein / aus enthält.
Recommended Posts