Twee uitrustingen — goud en zilver
Het thema wordt via de Environment aan alle views doorgegeven en wisselt onmiddellijk. Zelfs de stijl van wijzerplaat, wijzers en cijfers wordt voor elke uitrusting afzonderlijk vormgegeven.
Goud — jachthorloge
Diep lapislazuli email × verguld-Romeinse cijfers (IIII-notatie) · een centraal wapen van sikkelmaan en achtpuntige ster
Een gegraveerde kast van oudgoud (verouderd messing). Op de 6-uurpositie een klein venster voor het volgende alarm.
#8F7028
Lapis #101838
Goudaccent #D9B45C
Maangoud #F2DC96
tint #A67C2E
Zilver — spoorweghorloge
Witte wijzerplaat · dikke Arabische cijfers · staafwijzers
De secondewijzer is rood, zoals de gewoonte is bij spoorweghorloges
#9CA3AE
Wit porselein #FAFAF7
IJzerzwart #1A1C22
Rood #B02E2E
tint #44546A
De tijd instellen met de wijzers
Er wordt geen DatePicker gebruikt. In plaats van het gebaar van het opwinden van de kroon, sleept u de wijzers van de wijzerplaat zelf om het luidingstijdstip te bepalen. De wijzerplaat hieronder kunt u werkelijk verslepen.
Voormiddag7:30
- Hoek-naar-tijd-omzetting — sleepcoördinaten worden met atan2 omgezet in een hoek, die vervolgens wordt gekwantiseerd in stappen van 6° voor de minutenwijzer en 30° voor de uurwijzer (geïmplementeerd als een zuivere functie,
ClockAngleMath, gedekt door tests). - Koppeling — draait u de minutenwijzer, dan volgt de uurwijzer met 0,5°/minuut. Kruist u de 0-minutengrens, dan schuift het uur vooruit/terug (bepaald door een overgang van 45 naar 15 minuten).
- Tastzin — .sensoryFeedback(.selection) bij elke stap van 1 minuut. Geeft de vinger het klikgevoel van een tandwiel terug.
- Geselecteerde wijzer — een ring in messingkleur (een knop) verschijnt aan de punt van de wijzer, om te tonen welke wordt bediend.
- Bevestiging — opgeslagen via de plaquette "Op deze tijd instellen". Wordt omgezet naar AlarmKit's Alarm.Schedule.relative.
De droesem der tijd — avondschemering en dageraad
Hoe dieper de nacht wordt, hoe meer de wijzerplaat vertroebelt tot paarsblauw, als een vat voor de ziel. Bij het aanbreken van de dageraad wordt de droesem door het licht gezuiverd. Bij zonsondergang verrijst het sterrenbeeld van het seizoen op de wijzerplaat en gloeit het op. Probeer met de schuifregelaar hieronder een volledige dag te doorlopen.
21:00Avond
- Droesem — vanaf 16 uur tot in de avond vult zich een paarsblauwe droesem vanaf de rand van de wijzerplaat, tot ze tussen 23 en 4 uur haar maximum bereikt. Door een gelaagde gradiënt in vermenigvuldigingsmodus zinkt de ivoren grondkleur weg als "de bodem van een vat".
- Zuivering bij dageraad — tussen 4 en 6 uur lost licht van bovenaf (screen-blending) de droesem op. Het horloge in de hero-sectie beleeft deze cyclus voortdurend, gekoppeld aan de werkelijke tijd.
- Sterrenbeeld van het seizoen — bij zonsondergang (±2 uur) verrijst het sterrenbeeld van het seizoen in goud. Lente = Leeuw / Zomer = Schorpioen / Herfst = Cassiopeia / Winter = Orion. 's Nachts blijft het met een zwak schijnsel zichtbaar.
- SwiftUI-implementatie —
TimelineView(.everyMinute)berekent de tijdscoëfficiënt, die wordt weerspiegeld in de vermenigvuldigings-/screen-weergave van de Canvas en de dekking van het sterrenbeeldpad.
Het deksel der twaalf huizen — een sterrenbeeldwapen voor elke maand
In het midden van het deksel is diep lapislazuli email gevat, en telkens als de maand wisselt, wordt het huis (sterrenbeeld) van die maand opnieuw in goud gegrift — samen met een sikkelmaan en de traditionele Japanse maandnaam. Het deksel van het horloge in de hero-sectie draagt het wapen van de huidige maand.
Het kringende sterrenbeeld — · De sterren hebben diepte en blijven ronddraaien door de ruimte. Strijk ze aan, en de vaart neemt hen mee
De toon van het ontwerp volgt het "lapis email × oudgoud" van antieke zakhorloges (referentie: design-refs/ref-watch.jpg). De sterrenbeeldlijnen zijn een gestileerde, vereenvoudigde vorm. In SwiftUI wordt het maandelijks wisselende wapen gekozen met Calendar.current.component(.month) en getekend op de Canvas in goudaccent.
Arcana — mysteriën der twaalf huizen
Strijk in een cirkel over de wijzerplaat, win haar twaalfmaal op, en de kunst verschijnt. 's Nachts Arcana (12 soorten, één per huis), overdag Zonnekunsten (6 soorten), en met gesloten deksel Verzegelingen (6 soorten) — op het werkelijke toestel dus 24 soorten in drie stelsels. De demonstratie op deze pagina laat u zeven representatieve voorbeelden uitproberen.
Magie voor wanneer het deksel geopend is
Magie voor wanneer het deksel gesloten is (Verzegelingen, op het werkelijke toestel)
Het luidende uur (wanneer de alarmklok afgaat)
Breekt het uur aan, dan flikkert het hele scherm goud, en ontvouwt zich een magische cirkel met het opschrift "Het uur is aangebroken".
- Detectie van opwinding — volgt de cumulatieve rotatiehoek rond het midden van de wijzerplaat; elke 2π telt als één winding. De ruiten van de magische cirkel ontsteken. Laat u het 4 seconden ongemoeid, dan vervliegt de winding.
- Reiniging door dageraadslicht — Zuivert de droesem met licht. De wijzerplaat wordt gedwongen naar haar dageraadstoestand, en een gouden uitbarsting schiet erdoorheen.
- Storm der sterrenbeelden — Het sterrenbeeld van het seizoen laait op, en de sterren spatten weg van het horloge.
- Terugspoeling van de tijd — De wijzers snellen achteruit, en de magische cirkel draait achterwaarts.
- Barrière van paarse bliksem — Een paarsblauwe flits en schokgolf. De magische cirkel verkleurt naar paars.
- Karmozijnen vlam — Vonken stijgen op in de 3D-ruimte rond het horloge (perspectivisch geprojecteerde deeltjes, met flikkering).
- Werveling der blauwe golven — Rimpelingen verspreiden zich onder de voeten, en spatten tekenen bogen, getrokken door de zwaartekracht.
- Ring van de storm — Windstromen omcirkelen het horloge, voor en achter, en de windkracht doet het horloge schommelen.
- SwiftUI-implementatie — rotatiedetectie is een cumulatie van
atan2(toegevoegd aan ClockAngleMath); de magie is verenigd onder het protocolSpellEffect, met sleufinstellingen opgeslagen in UserDefaults. Bij het luiden wordt de alerting-status van AlarmKit gedetecteerd, wat de grote ontketening via fullScreenCover activeert.
Schermopbouw
Het beginscherm is altijd het horloge. Overzicht, bewerken en de zandloper zijn opgebouwd als werkvlakken op de binnenzijde van het deksel, als gegraveerde plaquettes op dezelfde viltondergrond.
Gij zult het uur bevrijden
Volgend alarm — morgen 07:30 's ochtends
Lang indrukken om van thema te wisselen
Start (RootView)
Alarmklok
Voormiddag7:30
Weekdagen · Snooze 9 min
Voormiddag9:00
Weekend
Namiddag10:15
Eenmalig
Overzicht (AlarmListView)
Tijd instellen
Voormiddag7:30
Label — "Ochtendthee" · Snooze 9 min
Op deze tijd instellenBewerken (AlarmEditorView)
Zandloper
Zandloper (TimerView)
Live Activity / Dynamic Island
De zandloper en de stopklok leven voort op het vergrendelscherm en in de Dynamic Island. Met één accent van messing op zwart behouden ze de aanwezigheid van het zakhorloge, zelfs binnen de systeem-UI.
POCKETCHIME
Thee-zandloper
4:23
Vergrendelscherm — aangedreven door Text(timerInterval:)
Dynamic Island (compact) — wijzerplaat links, resterende tijd rechts
Typografie en kleur
Het lettertype is de systeem-serif (New York / Hiragino Mincho). Cijfers worden gezet in tabelcijfers, en Latijnse labels krijgen brede letterspatiëring, als een gegraveerde inscriptie.
10:09
Tijd instellen
Open het deksel, en de dag begint. Win de wijzers op, en wacht op het uur.
RAILROAD GRADE · EST. 2026
| Viltondergrond (achtergrond) | #24331F → #0B110A | |
| Inkttekst (lopende tekst) | #EFE6CD | |
| Messing (accent) | #C9A24B | |
| Scharlaken (secondewijzer, waarschuwing) | #A03A2A | |
| Staal (Zilverthema) | #AEB6C2 |
| Ontwerp | Implementatie (volgens DESIGN.md) |
|---|---|
| Openen en sluiten van het deksel | rotation3DEffect(axis:(0,1,0), anchor:.leading) + spring 1.3s |
| Beweging van de wijzers | Continu aangedreven met TimelineView(.animation) |
| Slepen aan de wijzers | ClockAngleMath (een zuivere atan2-functie, gedekt door unittests) |
| Snooze | secondaryButtonBehavior: .countdown + postAlert van 9 minuten |
| Weergave van resterende tijd | Live Activity via AlarmAttributes<PocketWatchMetadata> |
| Themaverspreiding | Consistent doorgevoerd tot in de Widget via tintColor en metadata.themeName |