Două Înfățișări — Aur și Argint
Tema se răspândește în toate ecranele prin Environment și se schimbă pe loc. Până și stilul cadranului, al acelor și al cifrelor e croit deosebit pentru fiecare înfățișare.
Aur — Ceas de Vânătoare
Email de lapis-lazuli întunecat × cifre romane înveșmântate în aur (notația IIII) · blazon central cu lună nouă și stea cu opt colțuri
Carcasă gravată din aur vechi (alamă-nvechită). La ora 6, o mică fereastră arată ceasul următor.
#8F7028
Lapis #101838
Auriu #D9B45C
Aur Lunar #F2DC96
tint #A67C2E
Argint — Ceas de Cale Ferată
Cadran alb · cifre arabe îngroșate · ace drepte
Acul secundelor e roșu, după rânduiala ceasurilor de cale ferată
#9CA3AE
Porțelan Alb #FAFAF7
Negru de Fier #1A1C22
Roșu #B02E2E
tint #44546A
Rânduiește Ora cu Acele
Nu se-ntrebuințează DatePicker. În locul gestului de-a-nvârti coroana, tragi chiar acele cadranului pentru a hotărî ceasul sunării. Cadranul de mai jos poate fi tras cu-adevărat.
Dimineață7:30
- Conversia unghi→oră — coordonatele tragerii sunt prefăcute în unghi prin atan2, apoi cuantificate în trepte de 6° pentru acul minutar și 30° pentru cel orar (adunate într-o funcție pură,
ClockAngleMath, supusă testelor). - Legătura dintre ace — de învârți acul minutar, cel orar îl urmează la 0,5°/minut. Trecerea peste minutul 0 avansează sau dă înapoi ora (hotărâtă la trecerea 45→15 minute).
- Simțul atingerii — la fiece treaptă de 1 minut, .sensoryFeedback(.selection). Întoarce degetului simțul unui angrenaj care se-nclichetează.
- Acul ales — un inel (buton) de culoarea-alamei se arată la vârful acului, arătând pe care-l operezi.
- Încredințarea — se păstrează prin placa „Rânduiește la această oră”. Se preface în Alarm.Schedule.relative al AlarmKit.
Întunecarea Timpului — Amurg și Zori
Cu cât noaptea se adâncește, cadranul se-ntunecă tot mai mult, într-un violet-închis, ca un vas al sufletului. La ceasul zorilor, întunecimea e purificată o dată cu lumina. La asfințit, constelația anotimpului se arată strălucind pe cadran. Încearcă să parcurgi o zi întreagă cu ajutorul cursorului de mai jos.
21:00Seară
- Întunecarea — de la ora 16:00 și pe parcursul serii, o drojdie violet-închisă se adună dinspre marginea cadranului, atingând punctul maxim între 23:00 și 4:00. Printr-un gradient pe mai multe straturi, cu îmbinare multiplicativă, culoarea de fildeș a fundalului se scufundă precum „fundul unui vas”.
- Purificarea Zorilor — între 4:00 și 6:00, o lumină venită de sus (compunere de tip screen) dizolvă drojdia. Ceasul din capul paginii trăiește neîncetat acest ciclu, legat de ora reală.
- Constelația anotimpului — la asfințit (±2 ore), constelația anotimpului se arată în auriu. Primăvara = Leul / Vara = Scorpionul / Toamna = Cassiopeea / Iarna = Orion. Pe timpul nopții rămâne o urmă slabă de lumină.
- Implementare SwiftUI — coeficientul orei e calculat prin
TimelineView(.everyMinute)și reflectat în desenarea multiplicativă/screen a Canvasului și în opacitatea traseelor constelațiilor.
Capacul celor Douăsprezece Case — Blazonul Astral ce se Schimbă în Fiece Lună
În centrul capacului e-ncrustat un email de lapis-lazuli întunecat, iar la fiece schimbare de lună, Casa lunii (constelația) e re-gravată în aur. Alături, o lună nouă și denumirile tradiționale japoneze ale lunilor. Capacul ceasului din capul paginii poartă blazonul lunii în curs.
Casele-n Rotire — · stelele au adâncime și tot se-nvârt prin văzduh. Mângâie-le și-nvârte-le, iar inerția le poartă mai departe
Tonul înfățișării urmează „emailul de lapis × aurul vechi” al ceasurilor de buzunar antice (sursă: design-refs/ref-watch.jpg). Liniile constelațiilor sunt o formă stilizată și simplificată. În SwiftUI, blazonul fiecărei luni e ales prin Calendar.current.component(.month) și desenat pe Canvas în auriu.
Arcanele — Tainele celor Douăsprezece Case
Mângâie cadranul într-o mișcare circulară, învârte-l de douăsprezece ori, și arta se întrupează. Noaptea, Arcanele (12 soiuri, câte unul pentru fiecare Casă); ziua, Artele Solare (6 soiuri); cu capacul închis, Sigiliile (6 soiuri) — pe aparatul real, 24 de soiuri în trei sisteme. Demonstrația acestei pagini îți lasă să-ncerci șapte exemple reprezentative.
Magia de la deschiderea capacului
Magia de la închiderea capacului (pe aparatul real, Sigiliul)
Ceasul care Sună (la declanșarea Clopotului Ceasului)
Când ceasul sorocit soseşte, tot ecranul pâlpâie în auriu, iar cercul magic se desfășoară, purtând semnul „Sosit-a ceasul sorocit”.
- Detectarea înfășurării — urmărește unghiul de rotație cumulat în jurul centrului cadranului; fiece 2π înseamnă o înfășurare. Romburile cercului magic se aprind. Lăsat în voie patru secunde, înfășurarea se destramă.
- Purificarea Zorilor — Purifică întunecimea prin lumină. Cadranul trece silit în starea zorilor, iar o explozie aurie străbate totul.
- Furtuna Constelațiilor — Constelația anotimpului izbucnește în flăcări, iar stelele se-mprăștie departe de ceas.
- Întoarcerea Timpului — Acele se-nvârt înapoi cu mare viteză, iar cercul magic se-nvârte în sens invers.
- Bariera Fulgerului Violet — O fulgerare violet-întunecată și un șoc. Cercul magic se preface în violet.
- Flacăra Stacojie — Scântei de foc se înalță în zbor prin spațiul 3D împrejurul ceasului (particule în proiecție de perspectivă, cu tremur).
- Vârtejul Valului Azuriu — Valuri se lățesc sub picioare, iar stropii, trași de gravitație, desenează arcuri.
- Inelul Vijeliei — Dâre de vânt înconjoară ceasul, învârtindu-se din față și din spate, iar presiunea lor îl face să se clatine.
- Implementare SwiftUI — detectarea rotației cumulează
atan2(adăugat la ClockAngleMath); magia e unificată sub protocolulSpellEffect, iar setările locurilor merg în UserDefaults. La sunare, starea alerting a AlarmKit e detectată, declanșând marea manifestare prin fullScreenCover.
Alcătuirea Ecranelor
Ecranul principal e mereu ceasul. Lista, editarea și Clepsidra se-nalță ca fețe de lucru pe dosul capacului, alcătuite din plăci gravate așezate pe același postav.
Tu, eliberează ceasul sorocit
Ceasul următor — mâine, 7:30 dimineața
Apasă îndelung pentru a schimba înfățișarea
Ecranul Principal (RootView)
Clopotul Ceasului
Dimineață7:30
Zile lucrătoare · Amânare 9 min
Dimineață9:00
Weekend
Seară10:15
O singură dată
Listă (AlarmListView)
Rânduiește Ora
Dimineață7:30
Etichetă — „Ceaiul de dimineață” · Amânare 9 min
Rânduiește la această orăEditare (AlarmEditorView)
Clepsidra
Clepsidra (TimerView)
Live Activity / Dynamic Island
Clepsidra și Cronometrul trăiesc mai departe pe ecranul de blocare și în Dynamic Island. Pe fond negru, cu o singură notă de-alamă, păstrează prezența ceasului de buzunar chiar și în mijlocul interfeței de sistem.
POCKETCHIME
Clepsidra de Ceai
4:23
Ecranul de blocare — antrenat prin Text(timerInterval:)
Dynamic Island (compact) — cadranul în stânga, timpul rămas în dreapta
Tipografie și Culori
Fontul e serif-ul sistemului (New York / Hiragino Mincho). Cifrele sunt însemnate cu lățime egală (tabular), iar etichetele cu litere latine capătă un spațiu larg între litere, asemenea unei inscripții gravate în metal.
10:09
Rânduiește Ora
Când capacul se deschide, ziua începe. Întoarce acele, și așteaptă ceasul.
RAILROAD GRADE · EST. 2026
| Postav (fundal) | #24331F → #0B110A | |
| Cerneală (text curent) | #EFE6CD | |
| Alamă (accent) | #C9A24B | |
| Stacojiu (acul secundelor, avertismente) | #A03A2A | |
| Oțel (tema argintie) | #AEB6C2 |
| Concepție | Implementare (conform DESIGN.md) |
|---|---|
| Deschiderea și închiderea capacului | rotation3DEffect(axis:(0,1,0), anchor:.leading) + spring 1.3s |
| Mișcarea acelor | Antrenare continuă prin TimelineView(.animation) |
| Tragerea acelor | ClockAngleMath (funcție pură pe bază de atan2, supusă testelor unitare) |
| Amânare | secondaryButtonBehavior: .countdown + postAlert de 9 minute |
| Afișarea timpului rămas | Live Activity cu AlarmAttributes<PocketWatchMetadata> |
| Propagarea temei | Coerență până la widget prin tintColor și metadata.themeName |