首页 / 资讯中心 / 文章详情

Boring Notch 日历与提醒全解析:把今天的所有安排塞进刘海

Boring Notch 日历与提醒全解析:把今天的所有安排塞进刘海 ★ FEATURED ARTICLE
Boring Notch 日历与提醒全解析把今天的所有安排塞进刘海【免费下载链接】boring.notchTheBoringNotch: Not so boring notch That Rocks 项目地址: https://gitcode.com/gh_mirrors/bor/boring.notchMac 上的日程经常是散的工作会在一个日历里私人安排在一个日历里Reminders 里还躺着几条没截止日期的事。开个重要会之前你得手动切换三四个 App 确认时间。Boring Notch 的日历与提醒功能直接解决这个问题——它从系统的 EventKit 读取日程与提醒数据把今天的安排推到刘海的展示区不用离开当前窗口就能看到下一个会在几点开始。谁负责什么四个文件的分工先看代码结构后面会清楚很多。整条功能链由四个文件构成各管一摊CalendarManager单例持有当前日期、事件列表和日历选择状态负责协调授权与刷新CalendarService封装 EventKit处理授权请求、事件查询和提醒完成状态的回写BoringCalendarUI 层日期滚轮和事件列表都在这SettingsView里的CalendarSettings设置页的总开关和逐日历勾选框说白了Manager 管状态Service 摸系统 APIView 只管展示和转发事件。CalendarManager.swift 和 CalendarServiceProviding.swift 是数据链路的两个核心下面的场景都绕着它们展开。日程数据从哪来全部来自EKEventStore。第一次用日历面板时应用先查授权状态如果是notDetermined就触发系统弹窗let status EKEventStore.authorizationStatus(for: .event) if status .notDetermined { let granted try await store.requestFullAccessToEvents() }提醒授权走同一套流程只是类型换成.reminder。⚠️ 如果用户拒绝授权设置页会直接提示去系统设置里开启并给出跳转链接而不是默默给你一个空面板。当你第一次打开日历面板时授权通过后面板默认加载当天数据。日期是一条横向滚轮WheelPicker覆盖往前 7 天、往后 14 天滚一格走一天中心位置就是当前选中日期。滚轮滚动或直接点某个日期CalendarView的onChange会调用calendarManager.updateCurrentDate(...)下方事件列表跟着刷新。还有个细节列表默认开启智能滚动打开面板时自动把下一个未结束的事件滚到最上面视线天然落在最要紧的那条上。如果你只想显示工作日历不想让个人日历把面板搞花可以在设置里逐个取消勾选。选择状态用Defaults持久化switch Defaults[.calendarSelectionState] { case .all: selectedCalendarIDs Set(allCalendars.map(\.id)) case .selected(let ids): selectedCalendarIDs ids }全不选会自动回落到.all全选也归一化成.all这个小归一化逻辑避免状态漂移。改动后setCalendarSelected会立刻触发updateEvents()重拉列表实时生效。提醒事项和日历数据怎么同步最巧的一点是两类数据不分开显示。CalendarService拉事件时会同时查EKReminder统统转成统一的EventModel且只保留有 due date 的提醒。于是同一个列表里日历事件带左侧色条提醒事项带左侧圆圈。点圆圈会直接写回系统reminder.isCompleted completed try store.save(reminder, commit: true)这一步其实就是把完成状态交给系统托管——你在 Boring Notch 里勾选的提醒会在 Reminders 应用和同账号的其他设备上一并更新。当你在日历 App 里改了事件不需要手动刷新。CalendarManager在 init 里就监听.EKEventStoreChanged系统通知任何一处事件变动在 Calendar 里新建会议、从另一台设备修改都会自动重拉日历和事件列表。这就是面板数据和系统日历始终一致的原因。进阶配置让刘海日程更干净设置里 Calendar 页可以调的开关都对应 Constants.swift 里的 keyshowCalendar总开关默认关刘海里完全不出现日历面板hideCompletedReminders隐藏已勾选提醒默认开hideAllDayEvents过滤全天事件免得被一排 All-day 刷屏showFullEventTitles允许标题换行否则单行截断autoScrollToNextEvent打开面板时自动滚到下一个事件 还有个使用细节点击事件行会通过事件 URL 打开对应日历应用的详情页要改会议内容时不用自己去找日历 App。把它跑起来想上手的顺序很简单先在设置里打开 Show Calendar 完成授权再把不关心的日历批量取消勾选日常只留工作日历最清爽。克隆仓库就能直接读代码git clone https://gitcode.com/gh_mirrors/bor/boring.notch【免费下载链接】boring.notchTheBoringNotch: Not so boring notch That Rocks 项目地址: https://gitcode.com/gh_mirrors/bor/boring.notch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站