Live -Aktivitäten mit Aktualisierungsdatum, Timer und Stoppuhr mit benutzerdefinierten Formatierung
Posted: 09 Apr 2025, 21:44
Ich möchte eine Stoppuhr in meiner Live -Aktivität haben, die von 0 zählt. Es sollte nur ein oder zwei Ziffern und die zugehörige Einheit angezeigt werden, z. "7s", "15m", "2H". < /P>
Ich habe versucht,: < /p>
jedoch formatieren beide nicht die String wie ich möchte. Wenn möglich, möchte ich die volle Kontrolle über die Formatierung haben. Ich habe versucht, meine eigene benutzerdefinierte Erweiterung zu schreiben: < /p>
Wie dies nicht funktioniert, da TimedataSource . Ich könnte es in TimedataSource ändern: Gibt es eine Möglichkeit, wieder zum Datum zu kommen? Mein gewünschtes Format ist das, was Apple in seinen Entwurfsdokumenten zu fördern scheint. Warum gibt es keine Möglichkeit, dies leicht zu erreichen? Beachten Sie, dass einige Swiftui -Lösungen nicht mit Liveaktivität /acityKit , z. TimelineView oder andere Ansichten , die manuell aktualisieren.
Ich habe versucht,: < /p>
Code: Select all
Text(startDate, style: .relative)
< /code>
Es gibt auch: < /p>
Text(TimeDataSource.currentDate, format:
.stopwatch(startingAt: startDate, showsHours: true,
maxFieldCount: 1, maxPrecision: .seconds(1)))
Code: Select all
extension FormatStyle where Self == SystemFormatStyle.CustomStopwatchStyle {
public static func customStopWatch(date: Date) -> SystemFormatStyle.CustomStopwatchStyle {
return SystemFormatStyle.CustomStopwatchStyle(d: date)
}
}
extension SystemFormatStyle {
public struct CustomStopwatchStyle: Sendable, FormatStyle {
public typealias FormatInput = Date
public typealias FormatOutput = String
var d: Date
init(d: Date) {
self.d = d
}
public func format(_ value: Date) -> String {
return formattedDate(date: value)
}
}
Text(TimeDataSource.currentDate, format: .customStopWatch(date: startDate))