Menu Close

SwiftUI 03 – Einfacher Timer

In diesem neuen Projekt, wird ein ganz einfacher Timer erstellt, aber mehr für Testzwecke. Der Timer startet sofort, wenn die App startet und läuft genau 24 Stunden runter. Natürlich kann man die Anzahl der Stunden, Minuten, etc. die der Timer runterzählt, im Code ändern. Dieses Projekt ist mehr eine Machbarkeits-Studie.


    // *Simple Timer*
    // 
    //  ContentView.swift
    //  SwiftUI_SimpleTimer
                                 
    import SwiftUI
                                  
    struct ContentView : View {
    
    @State var nowDate: Date = Date()
    let refernceDate: Date
    var timer: Timer {
        Timer.scheduledTimer(withTimeInterval: 1), repeats: true) {
            self.nowDate = Date()
        }
    }
                
    var body: some View {
        NavigationView {
            ZStack {
                Text("24 hours from Now:").foregroundColor(.white)
                    .font(.largeTitle)
                    .offset(x: 0, y: -4ß)  
                Text(countString(from:referenceDate).foregroundColor(.white)
                    .font(.title)
                    .offset(x: 0, y: 40)
                    onAppear(perform: { 
                        _ = self.timer
                })      
            }.navigationBarTitle(Text("Timer")
        }.colorSheme(.dark)

        func countString(from date: Date) -> String {
            let calendar = Calendar(identifier: .gregorian)
            let components = calendar
                .dateComponents([.day, .hour, minute, .second],
                                    from: nowDate, to: referenceDate)
            return String(format: "%0dd:%0dh:%0dm:%0ds",
                        components.day ?? 00,
                        components.hour ?? 00,
                        components.minute ?? 00,
                        components.second ?? 00)
        }
    }
                                
    #if DEBUG
    struct ContentView_Previews : PreviewProvider {
        static var previews: some View {
            ContentView(referenceDate: Date(timeIntervalSinceNow: 86400)
        }
    }
    #endif 
    

Im obigen Code ist zu sehen, das man die Variablen und Konstanten in den struct über der body-Variablen bereitstellt und unter halb dieser Variablen in den struct wird die verwendete Timer-Funktion bereitgestellt. Eine Neuerung, ist die @State-Variable, mehr dazu in weiteren Projekten.

Im Preview struct stehend, wird die Zeit übergeben, die der Timer runter zählen soll. Ausserdem müssen diese Einstellungen im Code, in der SceneDelegate (ehemals AppDelegate) übergeben werden, siehe unten („sollte nicht der Normalfall werden!“)


    // *Simple Timer*
    // 
    //  SceneDelegate.swift
    //  SwiftUI_SimpleTimer

    . . .

    if let windowScene = scene as? UIWindowScene {
        let window = UIWindow(windowScene: windowScene)
        window.rootViewController = UIHostingController(rootView: ContentView(referenceDate: Date(timeIntervalSinceNow: 86400)))
        self.window = window
        window.makeKeyAndVisible()
    }

    . . .


Endresultat

Hier ist das komplette Projekt zu finden: https://github.com/DKoenig82/swiftui_swiftyking

Related Posts

Diese Seite verwendet Cookies, um die Nutzerfreundlichkeit zu verbessern. Mit der weiteren Verwendung stimmst du dem zu. Datenschutzerklärung