Два корпуси — золотий і срібний
Тема поширюється на кожне представлення через середовище та миттєво перемикається. Навіть стиль обличчя, рук і цифр розроблено чітко для кожного корпусу.
Золото — Справа Мисливця
Глибока ляпісова емаль × римські цифри із золотими акцентами (нотація IIII) · центральний гребінь півмісяця та восьмикутної зірки
Корпус зі старим золотом (зістарена латунь) з гравіюванням. Маленьке вікно для наступного будильника в положенні 6:00.
#8F7028
Ляпіс #101838
Золотий акцент #D9B45C
Місячне золото #F2DC96
відтінок #A67C2E
Срібло — годинник залізничний
Біле обличчя · жирні арабські цифри · руки естафети
Секундна стрілка встановлена червоним кольором, як це прийнято у залізничних годинниках
#9CA3AE
Біла порцеляна #FAFAF7
Чорне залізо #1A1C22
Червоний #B02E2E
відтінок #44546A
Встановлення часу вручну
DatePicker не використовується. Замість жесту накручування корони ви перетягуєте руками обличчя, щоб визначити час дзвінка. Обличчя нижче можна перетягувати.
AM7:30
- Перетворення кута в час — координати перетягування перетворюються на кут за допомогою atan2, а потім квантуються з кроком 6° для хвилинної стрілки та 30° для годинникової стрілки (реалізується як чиста функція,
ClockAngleMath, і охоплюється тестами). - Зв’язка — поворот хвилинної стрілки змушує годинну стрілку слідувати зі швидкістю 0,5°/хвилину. Перетин позначки 0 хвилин переводить годину вперед або назад (визначається переходом від 45 до 15 хвилин).
- Haptics — .sensoryFeedback(.selection) спрацьовує кожні 1 хвилину, повертаючи клацання шестерень до вашого пальця.
- Вибрана рука — кільце латунного кольору (ручка) відображається на кінчику руки, що вказує, якою з них ви працюєте.
- Підтвердження — зберігається за допомогою панелі «Установити на цей час», перетворено на Alarm.Schedule.relative AlarmKit.
Морок часу — Сутінки та Світанок
Чим глибша ніч, тим більше обличчя затьмарюється фіолетово-індиговим, як посудина для душі. На світанку темрява очищається світлом. На заході сонця сузір’я сезону сходить і світиться на обличчі. Спробуйте повзунок нижче, щоб перейти до дня.
21:00вечір
- Murk — з 16:00 до вечора фіолетово-індигова муть заповнюється від краю грані, досягаючи свого піку між 23:00 і 4:00. Через багатошаровий градієнт у багатошаровій суміші земля зі слонової кістки тоне, як «дно посудини».
- Очищення світанку — між 4:00 і 6:00 світло згори (екранна суміш) розчиняє муть. Годинник-герой живе за цим циклом у будь-який час, синхронізований із фактичним часом.
- Seasonal Constellation — at sunset (±2 hours), the season's constellation rises in gold. Spring = Leo / Summer = Scorpius / Autumn = Cassiopeia / Winter = Orion. Він ледь помітно залишається протягом ночі.
- Реалізація SwiftUI — часовий коефіцієнт обчислюється за допомогою
TimelineView(.everyMinute)та відображається у множенні/екранному візуалізації Canvas і непрозорості шляху сузір’я.
Обкладинка дванадцяти будинків — герб сузір’я на кожен місяць
Глибока ляпісова емаль розміщена в центрі обкладинки, і з кожним новим місяцем дім цього місяця (сузір’я) знову гравірується золотом — разом із півмісяцем і його традиційною японською назвою місяця. На кришці годинника-героя зображений герб нинішнього місяця.
Будинки, що повертаються —· Зірки мають глибину і продовжують обертатися в просторі. Погладжуйте їх, і імпульс веде їх далі.
Тон дизайну повторює антикварні кишенькові годинники «ляпіс емаль × зістарене золото» (посилання: design-refs/ref-watch.jpg). Лінії сузір'я — це стилізована, спрощена форма. У SwiftUI герб для кожного місяця вибирається за допомогою Calendar.current.component(.month) та відображається на Canvas із золотим акцентом.
Arcana — Таємниці дванадцяти домів
Погладьте обличчя по колу, накрутіть його дванадцять разів, і мистецтво проявиться. Вночі Arcana (12 видів, по одному на будинок); вдень, Solar Arts (6 видів); із закритою кришкою, ущільнення (6 видів) — 24 види в трьох системах на реальному пристрої. Демонстрація цієї сторінки дозволяє спробувати сім типових прикладів.
Магія, коли кришка відкрита
Магія, коли кришка закрита (Пломби, на фактичному пристрої)
Дзвінка година (коли лунає будильник)
Коли настає година, весь екран мерехтить золотом, і розгортається магічне коло з написом «Година настала».
- Winding Detection — відстежує кумулятивний кут повороту навколо центру грані; кожні 2π - одна обмотка. Діаманти чарівного кола світяться. Залиште на 4 секунди, і обмотка розвіється.
- Purge of Dawn's Light — Очищає темряву світлом. Обличчя переходить у світанок, і крізь нього проходить сплеск золота.
- Буря сузір'їв — Сузір’я сезону спалахує, а його зірки розлітаються від годинника.
- Перемотування часу назад — Стрілки мчать назад зі швидкістю, а магічне коло обертається в зворотному напрямку.
- Бар'єр фіолетової блискавки — Фіолетово-індиго спалах і ударна хвиля. Магічне коло стає фіолетовим.
- Багряне полум'я — Вуглинки піднімаються в тривимірному просторі навколо годинника (частинки, спроектовані в перспективі, з мерехтінням).
- Вир синіх хвиль — Брижі розповсюджуються під ногами та бризкають дугами, коли їх притягує сила тяжіння.
- Кільце бурі — Потоки вітру кружляють навколо годинника, спереду та ззаду, і його тиск змушує годинник гойдатися.
- Реалізація SwiftUI — виявлення обертання накопичує
atan2(додано до ClockAngleMath); магія уніфікована за протоколомSpellEffect, а налаштування слота зберігаються в UserDefaults. Під час дзвінка виявляється стан сповіщення AlarmKit, що запускає грандіозний ефект через fullScreenCover.
Композиція екрана
Головний екран – це завжди годинник. Список, редактор і таймер побудовані як робочі поверхні на внутрішній стороні обкладинки, гравіровані пластини, встановлені на тій самій повсті.
Ти звільниш час
Наступний будильник — завтра о 7:30
Натисніть і утримуйте, щоб змінити тему
Головна (RootView)
Будильник
AM7:30
Будні · Відкласти на 9 хв
AM9:00
Вихідні
PM10:15
Тільки один раз
Список (AlarmListView)
Встановіть час
AM7:30
Етикетка — «Ранковий чай» · Відкладка 9 хв
Встановіть цей часРедагувати (AlarmEditorView)
Таймер
Таймер (TimerView)
Live Activity / Динамічний острів
Таймер і секундомір працюють на екрані блокування та на динамічному острові. Завдяки одному латунному акценту на чорному вони зберігають присутність кишенькового годинника навіть в інтерфейсі користувача системи.
POCKETCHIME
Чайний таймер
4:23
Екран блокування — керується Text(timerInterval:)
Dynamic Island (компактний) — циферблат ліворуч, час, що залишився, праворуч
Типографіка та колір
Гарнітура — системна засічка (New York / Hiragino Mincho). Цифри позначено табличними цифрами, а латинські написи мають широкий інтервал між літерами, що нагадує вигравіруваний напис.
10:09
Встановіть час
Відкрийте кришку, і день починається. Накрути стрілки і чекай години.
RAILROAD GRADE · EST. 2026
| Повстяна земля (фон) | #24331F → #0B110A | |
| Рукописний текст (основний) | #EFE6CD | |
| Латунь (акцент) | #C9A24B | |
| Багряний (друга рука, попередження) | #A03A2A | |
| Сталь (Срібна тема) | #AEB6C2 |
| Дизайн | Реалізація (за DESIGN.md) |
|---|---|
| Відкривання та закривання кришки | rotation3DEffect(axis:(0,1,0), anchor:.leading) + spring 1.3s |
| Рух руки | Безперервно керується за допомогою TimelineView(.animation) |
| Перетягування рук | ClockAngleMath (чиста функція atan2, покрита модульними тестами) |
| Відкласти | secondaryButtonBehavior: .countdown + 9-хвилинний postAlert |
| Відображення часу, що залишився | Live Activity через AlarmAttributes<PocketWatchMetadata> |
| Розповсюдження теми | Послідовність до віджета через tintColor та metadata.themeName |