目的・役割
選択した種目の Max Weight / Total Volume / 1RM の推移をグラフで表示する画面。期間切替(1ヶ月/3ヶ月/全期間)対応。
UI 構成
| 要素 | 種類 | 説明 |
| カテゴリ選択 | Picker | 胸/背中/肩/腕/脚/腹筋/有酸素/その他 |
| 種目選択 | Picker | カテゴリで絞った種目 |
| 期間選択 | Picker | 1M / 3M / All |
| Max Weight グラフ | Charts | X軸=日付, Y軸=Max重量(or 有酸素時間) |
| Total Volume グラフ | Charts | X軸=日付, Y軸=Volume(or 有酸素距離) |
| シェアボタン | Toolbar | ShareCardPreviewView 起動 |
状態
| 状態 | 表示内容 |
| データなし | 「データがありません」 |
| データあり(重量系) | Max重量・Volumeグラフ |
| データあり(有酸素系) | 時間・距離グラフ |
使用するデータモデル
StatsViewModel {
var selectedPeriod: StatsPeriod // .oneMonth / .threeMonths / .all
func maxWeightData() -> [DataPoint]
func totalVolumeData() -> [DataPoint]
}
実装メモ
- SwiftUI Charts 使用
exercise.isCardio で有酸素判定 → 時間・距離切り替え
- OneRepMaxCalculator (Epley公式) で 1RM 推定
関連
変更履歴
| バージョン | 日付 | 変更内容 |
|---|
| 1.0 | 2026-05-09 | 初版作成 |