Les points pour créer une application de minuterie sont publiés dans plusieurs articles. Cet article décrit la mise en œuvre des alarmes et des vibrations qui se déclenchent lorsque le compte à rebours du minuteur atteint zéro.
Vous pouvez voir l'exemple de code à partir de l'URL du référentiel Git suivante. https://github.com/msnsk/Qiita_Timer.git
Importez une nouvelle bibliothèque appelée AudioToolbox dans TimeManager. La bibliothèque AudioToolbox contient des classes, des propriétés et des méthodes principalement pour les effets sonores, que vous pouvez utiliser pour interrompre l'alarme lorsque le compte à rebours du minuteur atteint zéro.
TimeManager.swift
import SwiftUI
import AudioToolbox //Importation supplémentaire
class TimeManager: ObservableObject {
//(Propriétés et méthodes omises)
}
Pour utiliser une source sonore incluse dans AudioToolbox, vous devez spécifier le SystemSoundID de cette source sonore. SystemSoundID est un type de données, typealias UInt32.
Donc, créez une propriété pour ce type de données dans la classe TimeManager, attachez le wrapper de propriété @Published et attribuez l'ID de la source audio que vous souhaitez spécifier par défaut comme valeur.
Les ressources suivantes vous aideront à découvrir quel ID sonne quoi. https://github.com/TUNER88/iOSSystemSoundsLibrary
J'ai vérifié les éléments de cette ressource un par un, mais il semble que ce soit le son de notification utilisé dans des modèles assez anciens d'appareils iOS. Nous n'avons trouvé aucune information sur le son de notification utilisé par défaut sur les modèles récents. Notez s'il vous plaît. (Si quelqu'un sait, je vous serais reconnaissant si vous pouviez commenter)
Le nom de la propriété était soundID, et j'ai personnellement estimé que c'était une source sonore confortable, j'ai donc attribué 1151 comme ID.
TimeManager.swift
import SwiftUI
import AudioToolbox //Importation supplémentaire
class TimeManager: ObservableObject {
//(Autres propriétés omises)
//Stocke l'ID audio par défaut avec le type de données pour l'utilisation de la source sonore stockée dans Audio Toolbox
@Published var soundID: SystemSoundID = 1151
//(Méthode omise)
}
Importez la bibliothèque AudioToolbox dans MainView ainsi que TimeManager à l'étape 1.
La raison de l'importation d'AudioToolbox ici est que vous devez écrire une méthode dans MainView qui émet une alerte lorsque le compte à rebours atteint réellement 0, et cette méthode est incluse dans AudioToolbox.
MainView.swift
import SwiftUI
import AudioToolbox //Importation supplémentaire
struct MainView: View {
//(Propriétés et méthodes omises)
}
Dans le modificateur .onReceive de ZStack de MainView, si le temps restant est supérieur à 0 ou inférieur à 0, le branchement conditionnel par l'instruction if-else a déjà été effectué. Ajoutez une méthode pour déclencher le son de l'alarme dans l'instruction else (lorsque le temps restant est égal ou inférieur à 0).
La méthode est décrite comme suit. Dans le premier argument, spécifiez la propriété soundID de la classe TimeManager préparée précédemment à l'étape 2. Le deuxième argument peut être nul.
AudioServicesPlayAlertSoundWithCompletion(self.timeManager.soundID, nil)
MainView.swift
struct MainView: View {
//(Propriété omise)
var body: some View {
ZStack {
//(réduction)
}
//Exécute le code dans la fermeture déclenchée par une minuterie qui s'active à chaque heure spécifiée (1 seconde)
.onReceive(timeManager.timer) { _ in
//L'état de la minuterie est.Ne rien faire sauf courir
guard self.timeManager.timerStatus == .running else { return }
//Si le temps restant est supérieur à 0
if self.timeManager.duration > 0 {
//Du temps restant-1 faire
self.timeManager.duration -= 1
//Lorsque le temps restant est égal ou inférieur à 0
} else {
//État de la minuterie.Changer pour arrêté
self.timeManager.timerStatus = .stopped
//Sonner une alarme
AudioServicesPlayAlertSoundWithCompletion(self.timeManager.soundID, nil)
}
}
}
}
À côté du son d'alarme se trouve la mise en œuvre de la vibration. Cela utilise également la même méthode que l'activation du son d'alarme. L'argument change.
Dans l'argument, la valeur de soundID pour les vibrations obtenue par la propriété kSystemSoundID_Vibrate est convertie en type de données SystemSoundID et transmise.
AudioServicesPlayAlertSoundWithCompletion(SystemSoundID(kSystemSoundID_Vibrate)) {}
MainView.swift
struct MainView: View {
//(Propriété omise)
var body: some View {
ZStack {
//(réduction)
}
.onReceive(timeManager.timer) { _ in
guard self.timeManager.timerStatus == .running else { return }
if self.timeManager.duration > 0 {
//(réduction)
} else {
//(réduction)
//Sonner une alarme
AudioServicesPlayAlertSoundWithCompletion(self.timeManager.soundID, nil)
//Activer la vibration
AudioServicesPlayAlertSoundWithCompletion(SystemSoundID(kSystemSoundID_Vibrate)) {}
}
}
}
}
La prochaine fois, nous créerons un écran de réglage qui comprend l'activation / désactivation de l'alarme et des vibrations.
Recommended Posts