[SWIFT] iOS App Entwicklung: Timer App (5. Implementierung von Alarm und Vibration)

スクリーンショット 2020-10-28 10.49.18.png

Inhalt

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.

Umgebung

Git-Repository

Sie können den Beispielcode unter der folgenden Git-Repository-URL sehen. https://github.com/msnsk/Qiita_Timer.git

Verfahren

  1. Importieren Sie die AudioToolbox-Bibliothek mit TimeManager
  2. Fügen Sie TimeManager Standard-Alarmtonnamen und Alarm-ID-Eigenschaften hinzu
  3. Importieren Sie die AudioToolbox-Bibliothek in MainView
  4. Implementieren Sie die Alarmauslösung im Modifikator .onReceive von ZStack in MainView
  5. Implementieren Sie die Vibrationsauslösung im Modifikator .onReceive von ZStack in MainView

1. Importieren Sie die Audio Toolbox-Bibliothek mit Time Manager

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)
}

2. Fügen Sie TimeManager Standard-Alarmtonnamen und Alarm-ID-Eigenschaften hinzu

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)
}

3. Importieren Sie die AudioToolbox-Bibliothek in MainView

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)
}

4. Implementieren Sie die Alarmauslösung im Modifikator MainView ZStack .onReceive

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)
            }
        }
    }
}

5. Implementieren Sie die Vibrationsaktivierung im Modifikator .onReceive von ZStack in MainView

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

iOS App Entwicklung: Timer App (5. Implementierung von Alarm und Vibration)
iOS App Entwicklung: Timer App (7. Implementierung der Alarmtonauswahl)
iOS App Entwicklung: Timer App (8. Implementierung des Fortschrittsbalkens)
iOS App Entwicklung: Timer App (4. Implementierung des Countdowns)
iOS App Entwicklung: Timer App (6. Erstellung des Einstellungsbildschirms)
iOS App Entwicklung: Timer App (2. Timer Anzeige)
iOS App Entwicklung: Timer App (Zusammenfassung)
iOS App Entwicklung: Timer App (1. Timer Zeiteinstellung)
iOS App Entwicklung: Timer App (10. Animation erstellen)
Entwicklung der iOS-App: Timer-App (9. Passen Sie die Farbe des Fortschrittsbalkens an)
Entwicklung der iOS-App: Timer-App (3. Start / Stopp-Taste, Reset-Taste)
Komplettes IOS-App-Entwicklungstagebuch zum Selbststudium
Roadmap für die Entwicklung von iOS-Apps (Einführung)
Standardimplementierung von Object.equals () und Object.hashCode ()
Vergleich der Implementierung der Produktion, die Bilder auf iOS und Android zum Leuchten bringt
Verbleib der JAXB-Referenzimplementierung und von DatatypeConverterImpl
Gründlicher Vergleich von Android- und iOS-Implementierungen
Implementierung von Registerkarten mit TabLayout und ViewPager
Implementierungsnotiz für SKStoreReviewController in der Swift-Benutzeroberfläche von iOS14
Dies und das der bedingten Verzweigung der Schienenentwicklung