Två skrudar — guld och silver
Temat sprids till alla vyer via Environment och växlar ögonblickligen. Ända ner till stilen på tavla, visare och siffror formges var skrud för sig.
Guld — jaktur
Mörk lasuremalj × förgyllda romerska siffror (IIII-notation) · centralt vapen med månskära och åttauddig stjärna
Graverad boett av gammalt guld (åldrad mässing). Ett litet fönster för nästa stund vid klockan 6.
#8F7028
Lasur #101838
Förgyllning #D9B45C
Måneguld #F2DC96
tint #A67C2E
Silver — järnvägsur
Vit urtavla · feta arabiska siffror · stavvisare
Sekundvisaren sätts i rött, som järnvägsurens sed bjuder
#9CA3AE
Vitt porslin #FAFAF7
Järnsvart #1A1C22
Rött #B02E2E
tint #44546A
Ställ tiden med visarna
Ingen DatePicker används. I stället för åtbörden att dra upp kronan drar du urtavlans egna visare för att bestämma ljudtiden. Tavlan nedanför går att dra på riktigt.
FM7:30
- Vinkel→tid-omvandling — dragkoordinaterna görs till en vinkel med atan2, och minutvisaren kvantiseras i steg om 6°, timvisaren om 30° (renodlad till en ren funktion
ClockAngleMathoch täckt av tester). - Samverkan — vrids minutvisaren följer timvisaren med 0.5°/min. Vid passage över 0 minuter förs timmen fram/tillbaka (avgörs vid övergången 45→15 minuter).
- Haptik — .sensoryFeedback(.selection) för varje steg om 1 minut. Ger tillbaka känslan av ett kugghjulsklick i fingret.
- Vald visare — en mässingsfärgad ring (knopp) visas vid visarens spets och anger vilken som styrs.
- Bekräftelse — sparas med plattan «Ställ in denna tid». Omvandlas till AlarmKits Alarm.Schedule.relative.
Stundens grumel — skymning och gryning
Ju djupare natten blir, desto mer grumlas tavlan i violett-indigo, likt ett kärl för själen. Vid gryningen renas grumlet av ljus. Vid solnedgången framträder årstidens stjärnbild och lyser på tavlan. Pröva reglaget nedan för att vandra genom ett dygn.
21:00Kväll
- Grumel — från klockan 16 in mot kvällen fyller violett-indigofärgat grumel från urtavlans kant och når sitt maximum mellan 23 och 4. Genom en flerskiktad gradient i multiplikationsblandning sjunker den elfenbensvita grundtonen likt «kärlets botten».
- Gryningens rening — mellan klockan 4 och 6 löser ljus ovanifrån (skärmblandning) upp grumlet. Hjälteuret lever ständigt denna cykel, i takt med den verkliga tiden.
- Årstidens stjärnbild — vid solnedgången (±2 timmar) framträder årstidens stjärnbild i guld. Vår = Lejonet / Sommar = Skorpionen / Höst = Cassiopeja / Vinter = Orion. Om natten dröjer den kvar som ett svagt sken.
- SwiftUI-implementering — tidskoefficienten beräknas med
TimelineView(.everyMinute)och återspeglas i Canvas multiplikations-/skärmritning och stjärnbildsbanans opacitet.
De tolv husens lock — ett stjärnbildsvapen för var månad
I lockets mitt är mörk lasuremalj infälld, och för varje ny månad graveras den månadens hus (stjärnbild) på nytt i guld — åtföljt av en månskära och dess gamla japanska månadsnamn. Hjälteurets lock bär den innevarande månadens vapen.
Kretsande stjärnbilder — · stjärnorna har djup och kretsar oavbrutet i rymden. Stryk och snurra dem, så bär tröghetens kraft dem vidare
Formgivningens ton följer det antika fickurets «lasuremalj × gammalt guld» (referens: design-refs/ref-watch.jpg). Stjärnbildslinjerna är en stiliserad, förenklad form. I SwiftUI väljs den månadsväxlande figuren med Calendar.current.component(.month) och ritas på Canvas i förgyllning.
Arcana — de tolv husens mysterier
Stryk tavlan i en cirkel och dra upp den tolv varv, så uppenbarar sig konsten. Om natten Arcana (12 slag, ett per hus); om dagen Solkonster (6 slag); med slutet lock Insegel (6 slag) — 24 slag ur tre system i den verkliga appen. Denna sidas uppvisning låter dig pröva sju representativa av dem.
Magi för när locket är öppet
Magi för när locket är slutet (Insegel i den verkliga appen)
Ljudande stunden (när budbärarklockan ljuder)
När stunden är inne blinkar hela skärmen i guld, och den magiska cirkeln vecklar ut sig med inskriften «Stunden är kommen».
- Uppdragningsdetektering — följer den ackumulerade rotationsvinkeln kring tavlans mitt; varje 2π är ett varv. Den magiska cirkelns romber tänds. Lämna den i 4 sekunder, och uppdragningen skingras.
- Gryningsljusets rening — Renar grumlet med ljus. Tavlan tvingas över i sitt gryningstillstånd, och en gyllene bristning far igenom.
- Stjärnbildernas storm — Årstidens stjärnbild flammar upp, och dess stjärnor sprids från uret.
- Tidens återgång — Visarna rusar baklänges i hög fart, och den magiska cirkeln snurrar baklänges.
- Den violetta blixtens barriär — Ett violett-indigofärgat sken och en stötvåg. Den magiska cirkeln övergår i violett.
- Den scharlakansröda lågan — Glöd stiger genom 3D-rymden runt uret (perspektivprojicerade partiklar, med flimmer).
- De blå vågornas virvel — Krusningar breder ut sig under fötterna, och stänket böjer sig i en båge när det dras av tyngdkraften.
- Stormvindens ring — Vindstråk kretsar runt uret, fram och bak, och deras tryck får uret att gunga.
- SwiftUI-implementering — rotationsdetekteringen ackumulerar
atan2(tillagd i ClockAngleMath), magin är förenad under protokolletSpellEffectoch fackinställningarna läggs i UserDefaults. Vid ljudning avläses AlarmKits alerting-tillstånd och den stora effekten utlöses via fullScreenCover.
Skärmuppbyggnad
Hemskärmen är alltid uret. Listan, redigeraren och timern byggs som arbetsytor på lockets insida — graverade plattor lagda på samma filtbotten.
Du skall släppa stunden fri
Nästa stund — imorgon 7:30 FM
Håll intryckt för att byta tema
Hem (RootView)
Budbärarklocka
FM7:30
Vardagar · snooze 9 min
FM9:00
Helger
EM10:15
Endast en gång
Lista (AlarmListView)
Ställ tiden
FM7:30
Etikett — «Morgonte» · snooze 9 min
Ställ in denna tidRedigera (AlarmEditorView)
Timer
Timer (TimerView)
Live Activity / Dynamic Island
Timern och stoppuret lever på låsskärmen och i Dynamic Island. Med en enda mässingsaccent mot svart bevarar de fickurets närvaro även inuti systemets UI.
POCKETCHIME
Tetimer
4:23
Låsskärm — driven av Text(timerInterval:)
Dynamic Island (compact) — urtavlan till vänster, återstående tid till höger
Typografi och färg
Typsnittet är systemets serif (New York / Hiragino Mincho). Siffrorna sätts med tabulära figurer, och de latinska etiketterna ges vid teckenmellanrum för att likna en graverad inskrift.
10:09
Ställ tiden
Öppna locket, och dagen börjar. Dra upp visarna och vänta på stunden.
RAILROAD GRADE · EST. 2026
| Filtbotten (bakgrund) | #24331F → #0B110A | |
| Bläcktext (brödtext) | #EFE6CD | |
| Mässing (accent) | #C9A24B | |
| Scharlakan (sekundvisare, varning) | #A03A2A | |
| Stål (silvertema) | #AEB6C2 |
| Formgivning | Implementering (enligt DESIGN.md) |
|---|---|
| Öppna och sluta locket | rotation3DEffect(axis:(0,1,0), anchor:.leading) + spring 1.3s |
| Visarnas gång | Kontinuerlig drivning med TimelineView(.animation) |
| Dra i visaren | ClockAngleMath (ren atan2-funktion, täckt av enhetstester) |
| Snooze | secondaryButtonBehavior: .countdown + postAlert 9 min |
| Visning av återstående tid | Live Activity via AlarmAttributes<PocketWatchMetadata> |
| Temaspridning | Enhetligt ända till widgeten via tintColor och metadata.themeName |