一个精美的 iOS 主屏幕小组件,用于显示从指定日期开始计算的天数,支持自定义标题和从图片提取颜色生成柔和融合渐变背景。
- 📅 日期计时:选择起始日期,自动计算并显示天数
- 🎨 智能配色:从截图提取颜色,生成符合图片色系的渐变背景
- 🌈 柔和融合渐变背景:多层线性渐变+柔光球叠加,无网格线,颜色自然融合
- ✏️ 自定义标题:支持自定义标题文案,默认显示"计时第"
- 📱 多尺寸支持:完美适配小、中、大三种组件尺寸
- 💾 数据持久化:所有设置自动保存,组件刷新时自动读取
- iOS 设备
- Scriptable App(免费)
- iOS 14+(支持小组件功能)
- 在 App Store 下载并安装 Scriptable
- 打开 Scriptable App
- 点击右上角 + 创建新脚本
- 将
index.js中的代码复制粘贴到脚本中 - 点击右上角
▶️ 运行脚本进行初始设置
首次运行脚本时,会依次提示你进行以下设置:
- 输入自定义标题(如"计时第")
- 或点击"使用默认"使用默认标题"计时第"
- 留空也会使用默认标题
- 选择起始日期(如纪念日、开始日期等)
- 组件会自动计算从该日期到今天的天数
- 从相册选择:选择一张图片,脚本会提取图片中的主要颜色生成柔和融合渐变背景
- 使用默认配色:使用预设的随机配色方案
- 在 Scriptable App 中完成初始设置
- 长按主屏幕进入编辑模式
- 点击左上角 + 添加小组件
- 搜索并选择 Scriptable
- 选择你想要的组件尺寸(小/中/大)
- 点击"添加小组件"
- 点击组件,选择你创建的脚本
- 尺寸:155×155 点
- 适合:简洁显示天数
- 尺寸:329×155 点
- 适合:横向展示,信息完整
- 尺寸:329×345 点
- 适合:大字体显示,视觉效果突出
- 修改标题 / 日期 / 背景颜色:打开 Scriptable App 运行脚本,按提示重新设置(数据会自动保存到本地文件)
- 刷新组件:iOS 小组件存在系统级刷新频率限制。运行脚本后会尝试更新已添加的组件,如仍未刷新,可长按桌面组件点“编辑小组件”或稍后等待系统自动刷新。
所有设置保存在 Scriptable 的本地文档目录:
widget-title.txt- 自定义标题widget-start-date.txt- 起始日期widget-colors.json- 背景颜色配置
- 真实颜色提取:使用 WebView + Canvas API 从图片中提取真实像素颜色
- 颜色增强:自动调整颜色饱和度和亮度,确保背景效果鲜明但不刺眼
- 柔和融合渐变:多层线性渐变+大半径柔光球叠加,干净无网格纹理
- 高分辨率渲染:使用 3x 分辨率渲染背景,确保 Retina 屏幕清晰显示
- 自适应布局:根据组件尺寸自动调整字体大小和间距
- 智能文字缩放:文字支持自动缩放,确保在不同尺寸下完整显示
- 颜色来源:若用户选图,则用 WebView+Canvas 读取实际像素点;否则从内置
DEFAULT_PALETTES随机选一组颜色。 - 颜色过滤与增强:提取后去重、过滤相近色;对饱和度、亮度做轻微提升,保证可视效果。
- 渐变生成:在 WebView 中以 3x 分辨率绘制,多层随机方向线性渐变叠加,再叠加大半径柔光球,最后覆上一层极轻微白色蒙层,得到无网格的柔和融合背景。
- 持久化与刷新:选定的颜色会写入
widget-colors.json,下次组件模式直接读取;每次运行都会重新生成背景图,保证刷新。
在代码第 6 行修改 DEFAULT_TITLE 常量:
const DEFAULT_TITLE = "计时第"在代码第 352-358 行修改 DEFAULT_PALETTES 数组:
const DEFAULT_PALETTES = [
["#667eea", "#764ba2", "#f093fb"],
// 添加更多配色方案...
]Q: 组件显示空白?
A: 确保已在 Scriptable App 中完成初始设置,包括标题、日期和背景颜色。
Q: 背景颜色不清晰?
A: 选择颜色丰富、对比度较高的图片,效果会更好。
Q: 如何重置所有设置?
A: 在 Scriptable App 中删除脚本,或手动删除保存的数据文件后重新运行。
Q: 组件不自动更新?
A: iOS 小组件有刷新限制,可以长按组件选择"编辑小组件"来手动刷新。
本项目仅供个人学习使用。
- 感谢 Scriptable 提供强大的自动化平台
- 背景生成算法参考了 Mesh Gradient 实现
享受你的个性化计时组件! ⏰✨