两种外装 — 金与银
主题经由 Environment 分发至所有视图,即时切换。乃至表盘・指针・数字之样式,皆依外装各自打造。
金 — 猎装表
绀琉璃珐琅×金彩罗马数字(IIII 记法)・新月与八芒星之中央纹章
古金(做旧黄铜)之雕金表壳。6时位置设有下一刻限之小窗
#8F7028
琉璃 #101838
金彩 #D9B45C
月金 #F2DC96
tint #A67C2E
银 — 铁路表
白色表盘・粗体阿拉伯数字・棒状指针
秒针依铁路表之作法,以赤色标出
#9CA3AE
白瓷 #FAFAF7
铁黑 #1A1C22
赤 #B02E2E
tint #44546A
以指针校准时刻
不使用 DatePicker。以拖拽表盘指针本身,取代转动表冠之所作,藉此决定鸣动时刻。下方表盘可供实际拖拽操作。
上午7:30
- 角度→时刻转换 — 以 atan2 将拖拽坐标转化为角度,分针以 6°、时针以 30° 为刻度量化(化为纯函数
ClockAngleMath,列为测试对象)。 - 联动 — 转动分针,时针便以 0.5°/分之速追随。跨过 0 分则进时/退时(以 45→15 分之跨越判定)。
- 触觉 — 每 1 分刻度即触发 .sensoryFeedback(.selection)。将齿轮之咔嗒手感回馈于指尖。
- 选中之指针 — 于指针尖端显示黄铜色圆环(旋钮),示以正在操作何者。
- 确定 — 以「按此时刻校准」牌保存。将转换为 AlarmKit 的 Alarm.Schedule.relative。
刻之浊影 — 宵暗与破晓
夜色愈深,表盘便如魂之器皿一般,渐次浊染成紫绀之色。破晓之刻,浊影随光一同净化。日落之刻,当季星座将浮现于表盘之上,熠熠生光。请以下方滑块,试着让一日循环流转。
21:00宵
- 浊影 — 自16时至入宵,紫绀之淀便自表盘边缘渐满,23时至4时达最盛。以正片叠底的多层渐变,使象牙底色如「器皿之底」般下沉。
- 破晓之净化 — 4时至6时,来自上方之光(屏幕合成)溶去浊淀。主展示的怀表与实际时刻联动,时刻皆活在此周期之中。
- 当季星座 — 日落(±2小时)之时,当季星座泛金浮现。春=狮子座 / 夏=天蝎座 / 秋=仙后座 / 冬=猎户座。夜间则以微光留存。
- SwiftUI 实现 — 以
TimelineView(.everyMinute)算出时刻系数,反映于 Canvas 的正片叠底/滤色绘制,以及星座路径的不透明度之上。
十二宫之表盖 — 随月更替之星座纹
表盖中央嵌有绀琉璃珐琅,每逢换月,当月之宫(星座)便以金重新刻就。伴以新月,并附日式月名。主展示怀表之表盖,缠绕着当月之纹样。
回旋之星宿 — · 群星带着纵深,于宙中持续回旋。抚动旋转则带有惯性
意匠之基调,仿古董怀表的「琉璃珐琅×古金」而作(参考资料: design-refs/ref-watch.jpg)。星座连线为意匠化之简式。SwiftUI 中,以 Calendar.current.component(.month) 选定随月更替之纹样,并以金彩绘制于 Canvas 之上。
魔导 — 十二宫之秘迹
以指于表盘画圈抚动,卷满十二周则法术显现。夜为魔导(十二宫12种),昼为秘术(6种),合盖则为封咒(6种) — 实机共三体系24种。此页之演武,可于其中试演七种代表之术。
开盖之时的魔法
合盖之时的魔法(实机中为封咒)
鸣动之刻(报刻钟发动之时)
刻限一至,满屏金光明灭,伴随「刻限已至」之刻印,魔法阵随之展开。
- 上弦检测 — 追踪绕表盘中心的累积旋转角,每 2π 即为一圈。魔法阵之菱形随之亮起。放置4秒不动,上弦之势便如雾消散。
- 晓光之祓 — 以光净化浊影。表盘强制切换至破晓之态,金色光芒随即迸发。
- 星宿风暴 — 当季星座燃烧而起,繁星自怀表飞散四方。
- 时光倒流 — 指针高速倒转,魔法阵随之逆向回旋。
- 紫电结界 — 紫绀闪光伴随冲击。魔法阵随之转为紫色。
- 红莲之焰 — 火星自怀表周身腾起,于3D空间中飞舞而上(透视投影粒子,附带摇曳效果)。
- 苍波之涡 — 涟漪自足下扩散,水沫受重力牵引划出弧线。
- 疾风之环 — 风痕绕行怀表前后,循环周旋,风压使怀表随之摇晃。
- SwiftUI 实现 — 旋转检测采用
atan2之累积(追加于 ClockAngleMath),魔法统一为 protocolSpellEffect,槽位设定则存于 UserDefaults。鸣动之时侦测 AlarmKit 的 alerting 状态,以 fullScreenCover 大发动。
画面构成
主页恒常为怀表。一览・编辑・刻限计则作为表盖背面之作业面,于同一毛毡底色之上,以雕金牌组成。
汝,解放刻限
下一刻限 — 明日 上午 7:30
长按以切换主题
主页(RootView)
报刻钟
上午7:30
平日 · 贪睡 9分钟
上午9:00
周末
下午10:15
仅此一次
列表(AlarmListView)
校准时刻
上午7:30
标签 — 「晨间红茶」 · 贪睡 9分钟
按此时刻校准编辑(AlarmEditorView)
刻限计
刻限计(TimerView)
Live Activity / Dynamic Island
刻限计与刻止计皆活跃于锁屏与 Dynamic Island 之中。黑底配以一点黄铜之色,即便身处系统 UI 之内,亦保有怀表之气息。
POCKETCHIME
红茶之刻限计
4:23
锁屏画面 — 以 Text(timerInterval:) 驱动
Dynamic Island(compact)— 左为表盘,右为剩余时间
排版与色彩
字体采用系统衬线体(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 + postAlert 9分钟 |
| 剩余时间显示 | AlarmAttributes<PocketWatchMetadata> 之 Live Activity |
| 主题传播 | 以 tintColor 与 metadata.themeName,直至 Widget 皆保持一致 |