ランキングの集計結果を表示
投票完了後または閲覧権限を得たユーザー向けに、Choice ごとの voteCount を集計してランキング順に表示する。
| 要素 | 種類 | 説明 |
|---|---|---|
| RankingHeaderView(Xスタイル) | VStack |
VoteView と同じ共通ヘッダ。7段構成。 1段目: 作成者アバター + 表示名 + フォローボタン + 右上ランクバッジ(44px円、Sは虹グラデ) 2段目: 投票タイプバッジ + クイズ通過バッジ(hasQuiz=true のみ) 3段目: 大タグ 4段目: 小タグ 5段目: 投票期間 + 残り時間 6段目: タイトル(結果リスト直前に再表示) 7段目: 説明文(存在時のみ) |
| 順位リスト | List | 順位・Choice・票数・票割合の棒グラフ |
| 自分の投票ハイライト | Border | 自分が選んだ Choice を強調表示 |
| シェアボタン | Toolbar | ShareImageService で結果画像生成 |
| 再投票ボタン | Button | nextVoteNumber ≤ 3 で表示 |
| バナー広告 | 共通配置 | MainTabView の safeAreaInset(.bottom) でタブバー直上(プレミアム時は非表示) |
navigationTitle は維持| 状態 | 表示内容 |
|---|---|
| 初期表示 | ProgressView |
| 表示中 | 順位リスト |
| 再投票可 | 再投票ボタン表示(消費ポイント明示) |
| 操作 | 遷移先 |
|---|---|
| シェア | ShareSheet |
| 再投票(revote1/revote2) | VoteView へ戻る(消費確認後) |
// Choices を voteCount 降順でソート
choices.sorted { $0.voteCount > $1.voteCount }
// 自分の投票(hasVotedOptimistically + Vote.choiceId)でハイライト
| バージョン | 日付 | 変更内容 |
|---|---|---|
| 1.0 | 2026-05-09 | 初版作成 |
| 1.1 | 2026-05-10 | RankingHeaderView を Xスタイル化(7段構成)/ResultView の重複タイトル表示を削除/バナー広告を MainTabView 共通配置へ統一 |