fix(live): 라이브룸 후원·하트 랭킹 왕관 UI를 동일화한다

This commit is contained in:
Yu Sung
2026-03-18 14:26:00 +09:00
parent 84d8e2f2e3
commit e9fc7e180d
3 changed files with 34 additions and 48 deletions

View File

@@ -14,17 +14,11 @@ struct LiveRoomDonationRankingItemView: View {
let item: GetLiveRoomDonationItem
let itemCount: Int
let rankingCrawns = ["ic_crown_1", "ic_crown_2", "ic_crown_3"]
let rankingColors = [
[Color(hex: "ffdc00"), Color(hex: "ffb600")],
[Color(hex: "ffffff"), Color(hex: "9f9f9f")],
[Color(hex: "e6a77a"), Color(hex: "c67e4a")],
[Color(hex: "ffffff").opacity(0), Color(hex: "ffffff").opacity(0)]
]
let crowns = ["img_rank_1", "img_rank_2", "img_rank_3"]
var body: some View {
HStack(spacing: 0) {
ZStack {
ZStack(alignment: .center) {
KFImage(URL(string: item.profileImage))
.cancelOnDisappear(true)
.downsampling(size: CGSize(width: 60, height: 60))
@@ -32,26 +26,14 @@ struct LiveRoomDonationRankingItemView: View {
.scaledToFill()
.frame(width: 60, height: 60, alignment: .top)
.clipShape(Circle())
.overlay(
Circle()
.stroke(
AngularGradient(colors: rankingColors[index < 4 ? index : 3], center: .center),
lineWidth: 3
)
)
if index < 3 {
VStack(alignment: .trailing, spacing: 0) {
Spacer()
Image(rankingCrawns[index])
.resizable()
.frame(width: 25, height: 25)
}
.frame(width: 63, height: 63, alignment: .trailing)
Image(crowns[index])
.resizable()
.frame(width: 77, height: 75)
}
}
.frame(width: 63, height: 63)
.frame(width: 77, height: 75)
Text("\(index + 1)")
.appFont(size: 13.3, weight: .bold)

View File

@@ -14,17 +14,11 @@ struct LiveRoomHeartRankingItemView: View {
let item: GetLiveRoomHeartListItem
let itemCount: Int
let rankingCrawns = ["ic_crown_1", "ic_crown_2", "ic_crown_3"]
let rankingColors = [
[Color(hex: "ffdc00"), Color(hex: "ffb600")],
[Color(hex: "ffffff"), Color(hex: "9f9f9f")],
[Color(hex: "e6a77a"), Color(hex: "c67e4a")],
[Color(hex: "ffffff").opacity(0), Color(hex: "ffffff").opacity(0)]
]
let crowns = ["img_rank_1", "img_rank_2", "img_rank_3"]
var body: some View {
HStack(spacing: 0) {
ZStack {
ZStack(alignment: .center) {
KFImage(URL(string: item.profileImage))
.cancelOnDisappear(true)
.downsampling(size: CGSize(width: 60, height: 60))
@@ -32,26 +26,14 @@ struct LiveRoomHeartRankingItemView: View {
.scaledToFill()
.frame(width: 60, height: 60, alignment: .top)
.clipShape(Circle())
.overlay(
Circle()
.stroke(
AngularGradient(colors: rankingColors[index < 4 ? index : 3], center: .center),
lineWidth: 3
)
)
if index < 3 {
VStack(alignment: .trailing, spacing: 0) {
Spacer()
Image(rankingCrawns[index])
.resizable()
.frame(width: 25, height: 25)
}
.frame(width: 63, height: 63, alignment: .trailing)
Image(crowns[index])
.resizable()
.frame(width: 77, height: 75)
}
}
.frame(width: 63, height: 63)
.frame(width: 77, height: 75)
Text("\(index + 1)")
.appFont(size: 13.3, weight: .bold)

View File

@@ -0,0 +1,22 @@
# 라이브룸 후원/하트 랭킹 왕관 UI 동일화
- [x] `UserProfileDonationAllItemView`의 왕관 UI 기준(`img_rank_1~3`, 오버레이 크기/정렬)을 확인한다.
- QA: 기준 코드에서 `ZStack(alignment: .center)` + `Image(crowns[index]).frame(width: 77, height: 75)` 구조 확인.
- [x] `LiveRoomDonationRankingItemView`의 왕관 표시를 기준 UI와 완전히 동일하게 변경한다.
- QA: 1~3위에서 `img_rank_1~3` 사용, 프로필 위 오버레이 프레임 `77x75`, 기존 원형 그라데이션 테두리 제거 확인.
- [x] 라이브 하트 랭킹 경로의 왕관 표시를 기준 UI와 완전히 동일하게 변경한다.
- QA: 하트 랭킹 아이템의 1~3위에서도 `img_rank_1~3` + `77x75` 오버레이가 동일하게 적용되는지 확인.
- [x] 변경 파일 진단/빌드/테스트를 수행하고 결과를 기록한다.
- QA: `lsp_diagnostics`(변경 파일), `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build`, `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" test` 실행 결과 기록.
---
## 검증 기록
- 기준 확인: `SodaLive/Sources/Explorer/Profile/UserProfileDonationAllView.swift``UserProfileDonationAllItemView`에서 `crowns = ["img_rank_1", "img_rank_2", "img_rank_3"]`, `ZStack(alignment: .center)`, 왕관 오버레이 `frame(width: 77, height: 75)` 구조를 기준으로 확인.
- 코드 변경: `SodaLive/Sources/Live/Room/Dialog/LiveRoomDonationRankingItemView.swift`에서 `ic_crown_1~3` + 원형 그라데이션 테두리(`AngularGradient`)를 제거하고 `img_rank_1~3` 오버레이(`77x75`) 구조로 변경.
- 코드 변경: `SodaLive/Sources/Live/Room/Dialog/LiveRoomHeartRankingItemView.swift`에서 `ic_crown_1~3` + 원형 그라데이션 테두리를 제거하고 `img_rank_1~3` 오버레이(`77x75`) 구조로 변경.
- 수동 확인(코드 기반): 두 파일 모두 `img_rank_1~3`/`frame(width: 77, height: 75)`가 존재하고 `ic_crown_`, `AngularGradient`가 미존재함을 검색으로 확인.
- 진단 확인: `lsp_diagnostics` 실행 결과 두 변경 파일 모두 `No such module 'Kingfisher'` 1건씩 동일하게 표시됨(로컬 SourceKit 환경 이슈로 기록).
- 빌드 검증: `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build` 실행 결과 `** BUILD SUCCEEDED **` 확인.
- 테스트 검증: `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" test` 실행 결과 `Scheme SodaLive is not currently configured for the test action.` 확인.