目的・役割

投票完了後または閲覧権限を得たユーザー向けに、Choice ごとの voteCount を集計してランキング順に表示する。

UI 構成

要素種類説明
RankingHeaderView(Xスタイル)VStack VoteView と同じ共通ヘッダ。7段構成。
1段目: 作成者アバター + 表示名 + フォローボタン + 右上ランクバッジ(44px円、Sは虹グラデ)
2段目: 投票タイプバッジ + クイズ通過バッジ(hasQuiz=true のみ)
3段目: 大タグ
4段目: 小タグ
5段目: 投票期間 + 残り時間
6段目: タイトル(結果リスト直前に再表示)
7段目: 説明文(存在時のみ)
順位リストList順位・Choice・票数・票割合の棒グラフ
自分の投票ハイライトBorder自分が選んだ Choice を強調表示
シェアボタンToolbarShareImageService で結果画像生成
再投票ボタンButtonnextVoteNumber ≤ 3 で表示
バナー広告共通配置MainTabView の safeAreaInset(.bottom) でタブバー直上(プレミアム時は非表示)

レイアウト変更(v1.1)

状態

状態表示内容
初期表示ProgressView
表示中順位リスト
再投票可再投票ボタン表示(消費ポイント明示)

遷移

操作遷移先
シェアShareSheet
再投票(revote1/revote2)VoteView へ戻る(消費確認後)

使用するデータモデル

// Choices を voteCount 降順でソート
choices.sorted { $0.voteCount > $1.voteCount }
// 自分の投票(hasVotedOptimistically + Vote.choiceId)でハイライト

実装メモ

関連

変更履歴

バージョン日付変更内容
1.02026-05-09初版作成
1.12026-05-10RankingHeaderView を Xスタイル化(7段構成)/ResultView の重複タイトル表示を削除/バナー広告を MainTabView 共通配置へ統一