一个短视频爆款级的"数字木鱼"iOS应用,使用纯原生 Swift 和 SwiftUI 框架打造。
- 水滴变形动画: 点击木鱼时,按钮会呈现出如水滴般柔软的变形和回弹效果
- 动态佛光环: 随着敲击频率自动调节光晕强度和旋转速度
- 粒子效果: 每次点击都会释放出精美的粒子特效
- 连击模式: 长按进入连击模式,获得5倍功德加成
- 独特字体:
- 数据展示使用 Monospaced 技术风格字体
- 禅意文本使用 Serif Editorial 风格字体
- 深色主题: 专业级深色背景配合琥珀色主题色
- 毛玻璃效果: 使用 SwiftUI 原生 Material 实现的透明毛玻璃导航栏
- 分层渐变: 微妙的几何图案和渐变营造深度感
- 支持多个木鱼音效文件随机播放
- 触觉反馈(Haptic Feedback)增强沉浸感
- 可在界面中一键开关音效
- 总敲击次数追踪
- 累积功德值系统
- 境界等级(初心→精进→入定→悟道→菩萨→圆满)
- 成就徽章系统
- 数据持久化保存
- iOS 17.0 或更高版本
- Xcode 15.0 或更高版本
- Swift 5.9 或更高版本
-
克隆或下载项目
cd /path/to/WoodenFish -
(可选)添加音效文件
为了获得最佳体验,请准备 5 个木鱼音效文件:
- 文件命名:
woodenfish_1.mp3,woodenfish_2.mp3, ...woodenfish_5.mp3 - 将这些文件添加到项目的根目录
- 在 Xcode 中,将它们拖入项目导航器
- 确保勾选 "Copy items if needed" 和 "Add to targets: WoodenFish"
注意:如果不添加音效文件,应用会使用触觉反馈作为替代。
- 文件命名:
-
在 Xcode 中打开项目
open WoodenFish.xcodeproj
-
选择目标设备并运行
- 选择一个模拟器或真机
- 点击运行按钮 (⌘R)
WoodenFish/
├── WoodenFishApp.swift # 应用入口
├── ContentView.swift # 主视图(包含启动动画)
├── WoodenFishView.swift # 核心木鱼交互视图
├── StatisticsView.swift # 统计数据视图
├── SoundManager.swift # 音效管理器
├── DataManager.swift # 数据持久化管理器
├── Assets.xcassets/ # 资源文件
└── README.md # 项目说明
- 单击木鱼: 敲击一次,获得 1 点功德
- 长按木鱼: 进入连击模式(持续 0.5 秒),在 5 秒内每次敲击获得 5 点功德
- 快速连击: 在 0.5 秒内连续点击会增强佛光环效果
- 左上角图表按钮: 查看统计数据和成就徽章
- 右上角音效按钮: 开启/关闭音效
- 顶部数字: 显示总敲击次数
- 底部功德值: 显示今日累积功德
withAnimation+spring实现物理回弹效果TimelineView实现实时动画更新contentTransition实现数字平滑过渡blur+blend modes创造戏剧性光效
- 使用
@State和@StateObject进行状态管理 - 粒子系统自动清理过期粒子
- 音效预加载提升响应速度
- UserDefaults 实现轻量级数据持久化
- MVVM 设计模式
- 单例模式管理全局服务(音效、数据)
- 模块化组件设计便于维护
在 WoodenFishView.swift 中修改颜色值:
// 佛光环颜色
Color(red: 1.0, green: 0.7, blue: 0.2) // 琥珀色
// 木鱼主体颜色
Color(red: 0.5, green: 0.3, blue: 0.15) // 木色在各个动画闭包中修改参数:
withAnimation(.spring(response: 0.3, dampingFraction: 0.5)) {
// 修改 response 值可以调整动画速度
}在 DataManager.swift 中的 getMeritLevel() 方法:
switch totalMerit {
case 0..<100: // 修改这些数值
return "初心"
// ...
}解决方案:
- 确保音效文件已正确添加到项目
- 检查文件命名是否正确(woodenfish_1.mp3 ~ woodenfish_5.mp3)
- 在 Xcode 中验证文件是否在 "Copy Bundle Resources" 中
解决方案:
- 检查是否使用了
DataManager.shared.addTap()来增加计数 - 验证 UserDefaults 权限没有被限制
解决方案:
- 在真机上测试(模拟器性能较差)
- 减少粒子生成数量(在
generateParticles()中修改循环次数) - 降低模糊半径值
- 添加更多成就徽章
- 支持自定义木鱼皮肤
- 添加每日签到功能
- 实现分享功能(截图分享到社交媒体)
- 支持 iPad 适配
- 添加音效音量调节
- 实现云端数据同步(iCloud)
欢迎提交 Issue 和 Pull Request!
本项目仅供学习和个人使用。
感谢所有为开源社区做出贡献的开发者们。
愿您在数字木鱼的敲击声中,找到内心的宁静与平和。 🧘♂️✨