- Dynamic Island now shows only the level icon (compact/minimal); the
bubble, instruction text, and numbers move to the shared lock
screen/CarPlay ActivityView, which iOS renders identically on both
surfaces (no separate CarPlay layout API exists for this).
- Replace +/- signs with a leading direction letter (H/F for Heck-
Front, R/L for rechts-links) via a new shared LevelDirectionFormatting
helper, used by the level screen, alignment assistant, and dashboard
card. The generic "Messwerte" list keeps raw signed values.
- Live Activity's instruction now reads as two lines ("Heck steht
höher 1.8°" / "links steht höher 0.9°") instead of a sentence plus a
separate number column.
- Fix the bubble level graphic's pitch axis being inverted (front/rear
reversed) in all three copies (app, watch, Live Activity widget) —
confirmed against the known-correct VehicleTiltView orientation.
- Dashboard card shows pitch and roll side by side, large, without the
"Längsneigung"/"Querneigung" labels, for the leveling device.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
31 lines
1.3 KiB
Swift
31 lines
1.3 KiB
Swift
import Foundation
|
||
|
||
/// Formatiert Neigungswerte mit vorangestelltem Richtungsbuchstaben statt
|
||
/// Vorzeichen – "H 1.8°" statt "1.8°", "L 0.9°" statt "-0.9°".
|
||
///
|
||
/// Gemeinsam für App und Live-Activity-Widget, deshalb hier statt in
|
||
/// `Shared/`, das die Extension nicht mitkompiliert (siehe
|
||
/// `LevelActivityAttributes.swift`).
|
||
enum LevelDirectionFormatting {
|
||
/// "1.8°" – Betrag ohne Vorzeichen, für Stellen, die die Richtung schon
|
||
/// im Wort oder Buchstaben ausdrücken.
|
||
static func magnitude(_ value: Double?) -> String {
|
||
guard let value else { return "–" }
|
||
return String(format: "%.1f°", abs(value))
|
||
}
|
||
|
||
/// Längsneigung als Kachel: positiv (Heck höher) → "H", negativ (Front
|
||
/// höher) → "F". Muss zum Vorzeichen von `LevelState.pitch` passen.
|
||
static func pitchTile(_ value: Double?) -> String {
|
||
guard let value else { return "–" }
|
||
return "\(value >= 0 ? "H" : "F") \(magnitude(value))"
|
||
}
|
||
|
||
/// Querneigung als Kachel: positiv (rechts höher) → "R", negativ (links
|
||
/// höher) → "L". Muss zum Vorzeichen von `LevelState.roll` passen.
|
||
static func rollTile(_ value: Double?) -> String {
|
||
guard let value else { return "–" }
|
||
return "\(value >= 0 ? "R" : "L") \(magnitude(value))"
|
||
}
|
||
}
|