如何让猫在菜单栏奔跑?RunCat Neo 菜单栏动画与 CPU 负载速度映射源码解析 【免费下载链接】RunCatNeoA cute running cat animation on your macOS menubar.项目地址https://gitcode.com/gh_mirrors/ru/RunCatNeo点击查看免费下载RunCat Neo是一款 macOS 菜单栏应用一只可爱的小猫在你屏幕顶部的菜单栏里奔跑而且——它的奔跑速度会实时映射 CPU 负载。CPU 越忙猫跑得越快。本文带你用最简单的方式看懂它的源码从 CPU 数据如何采样到速度公式如何计算再到 Core Animation 如何让猫跑起来全部讲清楚 它是什么先看效果安装 RunCat Neo 后菜单栏会出现一个动态图标。除了默认的小猫还内置了小狗、史莱姆、咖啡、牛顿摆、引擎、麻薯等 8 种跑者。更实用的是点开菜单栏还能看到系统资源面板CPU / 内存 / 存储 / 电池 / 网络以及你自定义的指标卡片整体架构CPU 数据如何变成奔跑的猫整个数据流只有一条主线非常清晰SystemInfoKit 采样 CPU ──→ RunnerService 计算速度 ──→ AppState 广播 ──→ RunnerLayer 播放动画RunCat Neo 采用 LUCA 架构源码分为三层依赖方向单向UserInterface → Model → DataSource。本文涉及的三个角色分别在不同层角色文件职责SystemMetricsServiceSystemMetricsService.swift按间隔默认 5 秒可选 3s/10s采样系统信息RunnerServiceRunnerService.swift把 CPU 百分比换算成奔跑速度RunnerLayerRunnerLayer.swift用 Core Animation 播放关键帧动画采样入口在 AppDelegate.swift#L57-L63AppDelegate启动一个任务组监听systemInfoStream数据流每收到一次系统快照就同时做两件事——刷新资源面板指标、更新猫的奔跑速度。核心公式CPU 负载如何映射成速度打开 RunnerService.swift#L89-L97最关键的updateRunnerSpeed(from:)方法只有几行func updateRunnerSpeed(from cpuInfo: CPUInfo?) { let cpuValue max(1.0, min(20.0, Float(cpuInfo?.percentage.value ?? .zero) / 5.0)) let speed: Float if userDefaultsRepository.speedDecreasesUnderLoad { 0.5 * (21.0 - cpuValue) } else { cpuValue } appStateClient.send(\.runnerSpeeds, speed) }拆解一下这段速度映射逻辑除以 5CPU 百分比是 0–100除以 5 后得到 0–20 的区间夹取在 1–20 之间max(1.0, min(20.0, ...))保证 CPU 为 0 时猫也不停下最低速度 1满载时封顶 20 倍速反向模式如果用户在设置里开启负载越高跑得越慢speedDecreasesUnderLoad则用0.5 × (21 − cpuValue)取反——CPU 空闲时狂奔、繁忙时慢走风格完全相反广播出去结果写入AppState的runnerSpeeds数据流见 AppState.swift#L35动画层订阅后即时生效。对应关系一目了然CPU 占用映射速度默认模式0%1最低速猫悠闲踱步50%10正常奔跑100%20极限冲刺这套行为有完善的单元测试覆盖例如 50% CPU 对应速度 10、满载对应 20见 RunnerServiceTests.swift#L230-L265。动画原理为什么不直接换图标最直觉的实现是每帧替换菜单栏图标。但 RunnerBarView.swift#L24-L32 的注释记录了一个真实的性能教训逐帧换图标会让菜单栏在明暗两种外观下对状态项截图常驻消耗 7–8% CPU而改用 Core Animation 图层方案后只有约 0.1%。RunnerLayer.swift 的做法是创建一个CAKeyframeAnimation动画属性是contents图层内容calculationMode .discrete离散模式逐帧切换repeatCount .infinity无限循环duration 帧数 / 2即 5 帧的猫动画一轮播 2.5 秒setFrames方法RunnerLayer.swift#L45-L72关键一步在setSpeed(_:)RunnerLayer.swift#L81-L94不重做动画只改图层的speed倍率。通过同步timeOffset与beginTime可以瞬间变速且画面不跳帧——这就是CPU 一变猫立刻加减速的底层机制。动画编排不同角色为什么跑姿不一样内置角色的帧序列不是简单 0→1→2→3→4而是由 FrameOrder.swift#L28-L41 定义case .swing: [0, 1, 2, 3, 4, 3, 2, 1] // 麻薯左右摇摆 case .pendulum: [0, 1, 2, 1, 0, 3, 4, 3] // 牛顿摆钟摆往复 case .partyHorn: [0, 1, 2, 3, 4, 4, 3, 2, 1] // 史莱姆号角式回旋配合 RunnerKind.swift 里每个角色的帧数猫、狗、史莱姆、水滴、牛顿摆、麻薯各 5 帧咖啡与引擎 10 帧就能得到完全不同的跑姿猫是匀速前进麻薯是摇摆牛顿摆则是钟摆。打造你自己的跑者除了内置角色RunCat Neo 支持自定义跑者把一组 PNG 关键帧导入就能让任何角色在菜单栏飞奔编辑器源码见 CustomRunnerEditorView.swift自定义帧持久化逻辑在 RunnerService.swift#L121-L136此外它还能监视任意本地 JSON 文件并在面板渲染成卡片Schema 文档见 CustomMetricsSchema.md比如接入 Claude Code 状态栏 或 比特币价格。上手指南3 步让猫跑起来安装在 Mac App Store 搜索 RunCat Neo 安装要求 macOS 26 或更高版本换角色点击菜单栏图标在跑者列表里选猫、狗、史莱姆等或导入自己的关键帧调手感在设置 → 跑者中可选择负载高时减速模式与水平翻转方向速度映射公式会即时生效。小结RunCat Neo 用一条极简的数据流把系统监控变成了桌面宠物SystemMetricsService负责采样3/5/10 秒可选RunnerService负责映射CPU ÷ 5夹取在 1–20可反向RunnerLayer负责呈现CAKeyframeAnimation 图层speed倍率全程约 0.1% CPUFrameOrder负责个性不同角色的帧编排跑姿。想深入更多细节可以从 ARCHITECTURE.md 开始它完整描述了三层架构与数据流约定 赞分享【免费下载链接】RunCatNeoA cute running cat animation on your macOS menubar.项目地址https://gitcode.com/gh_mirrors/ru/RunCatNeo点击查看免费下载相关推荐VS Code 开源 AI 编辑器路线图Copilot Chat 开源与核心重构全解读VS Code 开源 AI 编辑器路线图Copilot Chat 开源与核心重构全解读 2025 年 5 月VS Code 官方团队发布了《VS Code:mpv 音视频同步完整指南4 个场景把音画对齐到毫秒级mpv 音视频同步完整指南4 个场景把音画对齐到毫秒级 看剧时女主的口型比声音快了半拍这就是音视频同步失守。mpv 是命令行媒体播放器用几个参数就能把音画音视频RunCat 365终极指南让可爱小猫在Windows任务栏上奔跑的完整教程RunCat 365终极指南让可爱小猫在Windows任务栏上奔跑的完整教程 还在为单调的工作桌面感到无聊吗RunCat 365为你带来全新体验这款创新的桌面应用上一篇小红书数据采集的终极解决方案5分钟快速上手指南下一篇Zotero文献去重终极指南快速清理重复文献的高效解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考