# Rainote_ios **Repository Path**: rainote/rainote_ios ## Basic Information - **Project Name**: Rainote_ios - **Description**: No description available - **Primary Language**: Swift - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-08 - **Last Updated**: 2026-10-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Rainote - iOS 原生项目说明 > 基于 Rainote-手机端-交互稿-v2.11.html 交互原型 1:1 还原的 SwiftUI 原生项目 ## 快速开始(2 分钟即可在 Xcode 运行) ### 方式 A:新建 Xcode 项目后导入源码(推荐,最稳) 1. 打开 Xcode → **File → New → Project** 2. 选 **iOS → App**,点 Next 3. 填写: - Product Name: `Rainote` - Interface: **SwiftUI** - Language: **Swift** - 取消勾选 Use CoreData / Include Tests - Deployment Info: iOS **16.0** 或以上 - 选 **iPhone** 仅竖屏(Portrait) 4. 保存至:`/Users/mac_work/Documents/trae_projects/Rainote/`(Xcode 自动生成 Rainote.xcodeproj) 5. 在 Xcode 左侧 Project Navigator 删除模板自带的 `RainoteApp.swift`、`ContentView.swift`(Move to Trash) 6. 选中最顶层的 `Rainote` 文件夹(蓝色图标)→ 右键 **"Add Files to 'Rainote'..."** 7. 选择本目录下的子文件夹 `Rainote/`(即本 README 所在目录下的同名子文件夹,里面包含 Models、Views、ViewModels 等),勾选: - ☑️ Copy items if needed - ☑️ Create groups - ☑️ Add to targets: Rainote 8. 点 Add,等待 Xcode 索引完成后按 **⌘ + R**,即可在模拟器中启动 ### 方式 B:使用 Swift Package(可直接用 Xcode 打开 Package.swift) ```bash cd /Users/mac_work/Documents/trae_projects/Rainote open Package.swift ``` 然后选 iPhone Simulator 运行即可。 ## 功能清单(全部对应 HTML v2.11 交互稿) | 模块 | 实现状态 | 说明 | |------|---------|------| | 引导页 Onboarding | ✅ | 三步:欢迎 → 选3个领域 → "制卡中"渐入 | | 首页卡片墙 CardWall | ✅ | 蜂窝5环 61cell + Dock式透镜放大 + 拖拽惯性 + 松手弹簧吸附 + 边界rubber-band | | 天空按钮 Sky Nudge | ✅ | 顶部"下雨"呼吸动画 + 按一下进入专注 | | 杯子容量选择 Grip | ✅ | 300/500/900ml 三档大杯小杯切换 + 拖拽捏合(tap 切换)| | 专注模式 Focus | ✅ | CADisplayLink 60fps 下雨(140 雨滴正弦摆动)+ 卡片积水 + 切雨声(< / > 切换 12 个印记)| | 完成页 Complete | ✅ | 倒水进水库 → 卡片翻转 → 正面记录 / 背面写心得(翻卡 3D 效果)| | Dock 栏 + 三 Tab | ✅ | 卡片 / 记录 / 我的 三 Tab + 回首页橙色大按钮 | | 卡片页 Cards | ✅ | 最近三张横排 + 9 领域 3×3 网格 + 展开的卡片抽屉 5 列 + 箭头指示器 | | 记录年视图 Year Grid | ✅ | 7 列月份日历 + 多 session 堆叠偏移旋转 + 长按放大镜 + 点天查看日详情 3D 翻卡 | | 我的页 Me | ✅ | 等级卡 + 余额卡 + 当季(2026秋 宁波)印记星座(12 星 SVG 连线)+ 设置弹层(默认雨声 / 触感开关 / 重选领域 / 关于) | | 等级雨水系统 | ✅ | Lv.1→12 阈值 0/600/1800/3600/6000/9000/13k/18k/24k/30k/36k/42k ml | | 12 个声音印记解锁 | ✅ | 累计 500/1000/1500/3000/4000/5000/7000/9000/12k/15k/18k/22k ml 依次解锁 | | 数据持久化 | ✅ | UserDefaults 单键 "rainote.v24" JSON Codable 完整存储 + Demo 数据自动 seed | ## 核心参数(完全对齐 HTML 原型) ``` 9 领域:阅读/记忆/视听/写作/编程/艺术/设计/音乐/媒介 40 张卡片:对应 9 领域 2~5 张 + 公用卡 5 环蜂窝:pitch=100, tile=84, 各环 scale [1,1,0.8,0.66,0.62] 透镜公式:Lf(r) = LA + LB·e^(-(r/σ)²),LA=0.6, LB=0.62, σ=150 Ff(r) = LA·r + LB·σ·0.886227·erf(r/σ) (Abramowitz-Stegun erf 近似) 弹簧物理:k=115, c=2√k≈21.45(临界阻尼) 杯容量:300ml(小), 500ml(中), 900ml(大) → 视觉 scale = 1 + (ml-300)/600 * 0.4 演示加速:speedFactor = 60× (500ml 专注约 8.3 秒可装满) 颜色:纸 #efece6 / 墨 #1c1a17 / 雨 #6b86a6 / 暖 #d08a45 / 夜 #0f1b23 字体:标题 Songti SC(宋体) / 正文 SF Pro 或 PingFang SC ``` ## 目录结构 ``` Rainote/ ├── RainoteApp.swift → App 入口,注入 AppState 全局对象 ├── AppDelegate.swift → UIApplicationDelegate 适配 ├── Info.plist → 应用配置(竖屏锁定 / 状态栏隐藏 等) ├── Models/ │ ├── Domain.swift → 9 领域 + SIMV 相似度矩阵 │ ├── Card.swift → 40 张卡 + CapTier 三档容量 │ └── Session.swift → FocusSession / SoundItem(12 印记)/ Season / LevelInfo ├── ViewModels/ │ └── AppState.swift → 全局状态 + 页面路由 + 蜂窝坐标 + 透镜变换 + 排序引擎 ├── Views/ │ ├── RootView.swift → 页面 switch 路由器 │ ├── Components/ │ │ ├── Theme.swift → RainoteTheme 颜色 + View 修饰器(.paperBackground .cardGlass .primaryButton...) │ │ └── CardTileView.swift → SwiftUI 卡片 tile / Soon 占位 / 波浪水位 │ ├── Onboarding/ │ │ └── OnboardingView.swift → 三步引导 │ ├── Home/ │ │ └── HomeView.swift → 卡片墙(UIViewRepresentable + CoreGraphics 绘制手势层) │ ├── Focus/ │ │ └── FocusView.swift → 专注模式(下雨 CADisplayLink + 声音印记切换) │ ├── Complete/ │ │ └── CompleteView.swift → 完成页(倒水→水库→翻卡→写心得) │ ├── Dock/ │ │ ├── DockView.swift → Dock 容器 + 回首页橙色大按钮 + Tab 切换 │ │ └── CardsPage.swift → 卡片 Tab(最近 / 领域 / 展开抽屉) │ ├── Record/ │ │ └── RecordPage.swift → 记录 Tab(年网格 + 放大镜 + 日详情3D翻卡) │ └── Me/ │ └── MePage.swift → 我的 Tab(等级 / 余额 / 星座印记 / 设置弹层) └── Services/ └── StorageService.swift → UserDefaults JSON 存档 ``` ## 后续 TODO(可选增强) - [ ] 接入 AVAudioPlayer 播放 12 种真实雨声 mp3(目前仅 UI 切换,不发声) - [ ] 接入 CoreMotion:设备正面朝下(faceDown)自动进入专注,拿起自动停止(目前需手动点天空按钮 / "先到这里") - [ ] 接入 CoreHaptics / UIImpactFeedbackGenerator:点击、翻卡、容量切换加触感反馈(目前仅视觉状态变化) - [ ] 记录页年视图放大镜真正缩放 cells(目前为圆形外框 + 内容放大预览效果,可进一步做 Dock 式局部放大) - [ ] 打包 Assets.xcassets(AppIcon 目前为默认占位) ## 常见问题 **Q: 引导页第一次选完 3 领域 → 首页看不到卡片?** A: 选完后"制卡中"动画会自动跳转,若卡在某页可清 App 重装(首次 seed 只触发一次),或在 AppState 的 init() 里把 demoSeedEnabled 保持 true。 **Q: 专注模式倒水太快 / 太慢?** A: 改 FocusView.swift 里 `speedFactor`(目前 60 倍演示加速),真实使用改为 1 即 1ml/秒。 **Q: iOS 最低版本?** A: 部署目标建议 iOS **16.0+**(用到了 Canvas、@EnvironmentObject、onReceive 等,均自 iOS 14+ 可用,但部分修饰器需 iOS16;如有报错,将 deployment 调高即可)。