001project_wildgrowth/ios/WildGrowth/COMPLETION_SkeletonReveal版_...

3.9 KiB
Raw Blame History

CompletionView Skeleton & Reveal 版 — 审查报告(不应用)

审查日期2025-01-29
范围Skeleton & Reveal Edition纯白卡片 + 呼吸骨架屏 + 蓝色弥散光 + 粒子庆祝)
结论仅审查、不修改仓库需求落实正确ParticleModifier 已按前次审查完成修复,有一处可选视觉层级调整


1. 需求落实情况

项目 要求 定稿实现 结论
纯白卡片 彻底去「脏」,回归纯白 background(Color.white)
拒绝空状态 未激活时用骨架屏替代留白 IdleSkeletonViewRoundedRectangle 骨架 + 呼吸透明度
呼吸骨架 暗示「数据等你揭开」 isBreathing ? 0.3 : 0.6 配合 repeatForever(autoreverses: true)
蓝色弥散光 激活后四周泛蓝光 shadow(color: isSystemOn ? brandBlue.opacity(0.25) : ..., radius: 40)
彩带爆炸 激活瞬间粒子庆祝 ConfettiExplosionCircle + Capsule
布局平衡 激活后数字填补按钮消失空间 ActiveDashboard 使用 Spacer 居中,无按钮占位

2. ParticleModifier 修复确认

Magic Card 版审查中的两处问题均已修正:

项目 Magic Card 版问题 Skeleton & Reveal 实现 结论
弧度转换 cos(angle) 使用角度制 angleRad = angleDegrees * .pi / 180,使用 cos(angleRad)
随机值稳定 angle/distance 为计算属性,每次重算 init 中生成并存入 let angleRadlet distance
粒子颜色 randomElement()! 每次重绘变化 confettiColors[i % confettiColors.count] 按 index 固定

3. 逻辑继承

项目 结论
持久化 Key has_revealed_course_\(courseId)
游客短路 0.5s 延迟,performActivation(0, 0),不调网络
登录用户 0.8s 延迟 → fetchUserProfile → performActivation
checkSystemStatus 已激活时恢复最终值
数字滚动 withAnimation(.linear(1.5)) + RollingNumberText

4. 可选:粒子与文字层级

当前实现ConfettiExplosion 使用 .zIndex(2),卡片内容 VStack 使用默认 zIndex因此粒子叠在文字之上。

注释意图:「粒子炸在文字后面,但在卡片背景前面」——若希望粒子在文字后面,需要降低粒子的 zIndex或提高卡片内容的 zIndex。

建议:若需粒子在文字后面,可为卡片 VStack 添加 .zIndex(1),并为 ConfettiExplosion 使用 .zIndex(0) 或不设置。若希望粒子在前面以增强庆祝感,可保持现状。属视觉偏好,非必须修改。


5. 其他实现细节

项目 说明
骨架 blur(radius: 3) 增加模糊感,在多数设备上可接受;低端机若有卡顿再考虑去掉
呼吸动画 onAppearwithAnimation(.easeInOut(duration: 1.0).repeatForever(autoreverses: true)) 驱动 isBreathing,逻辑正确
ScaleButtonStyle 未使用,无重复定义风险
接口 三参数不变,可直接替换

6. 总结

维度 结论
需求落实 纯白、骨架屏、弥散光、粒子、布局均符合
ParticleModifier 弧度、随机稳定、颜色已修正
逻辑继承 Key、游客、登录用户、数字滚动正确
粒子层级 可选:按需求调整 zIndex 以实现「粒子在文字后面」
接口兼容 可直接替换

审查结论Skeleton & Reveal 版满足设计要求ParticleModifier 已正确修复,可直接使用;如需粒子在文字后方,可按上节建议调整 zIndex。本次未对仓库做任何修改。