From 822174656981839e3f1d3a794863f32160deb657 Mon Sep 17 00:00:00 2001 From: Yu Sung Date: Thu, 23 Oct 2025 18:55:53 +0900 Subject: [PATCH] =?UTF-8?q?feat(image):=20=EB=A9=94=EC=9D=B8=20=ED=99=88,?= =?UTF-8?q?=20=EC=B1=84=ED=8C=85=20-=20=ED=86=A1=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=EC=97=90=20DownsampledKFImage=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 수평 리스트 HStack → LazyHStack으로 교체해 프리로딩/메모리 개선 --- .../Sources/Chat/Original/OriginalTabItemView.swift | 13 ++++--------- SodaLive/Sources/Chat/Talk/TalkItemView.swift | 12 ++++-------- SodaLive/Sources/Content/ContentItemView.swift | 11 +++++------ .../Content/Main/V2/ContentMainBannerViewV2.swift | 12 +++++------- .../Content/Series/DayOfWeekSeriesView.swift | 4 ++-- .../Sources/Content/Series/SeriesItemView.swift | 13 ++++++------- .../Sources/Home/HomeCreatorRankingItemView.swift | 11 +++++------ SodaLive/Sources/Home/HomeLiveItemView.swift | 10 +++++----- SodaLive/Sources/Home/HomeTabView.swift | 12 ++++++------ SodaLive/Sources/Home/HomeWeeklyChartItemView.swift | 10 +++++----- .../RecommendChannelContentItemView.swift | 10 +++++----- .../RecommendChannel/RecommendChannelItemView.swift | 11 +++++------ 12 files changed, 57 insertions(+), 72 deletions(-) diff --git a/SodaLive/Sources/Chat/Original/OriginalTabItemView.swift b/SodaLive/Sources/Chat/Original/OriginalTabItemView.swift index 82dc090..d50aaf5 100644 --- a/SodaLive/Sources/Chat/Original/OriginalTabItemView.swift +++ b/SodaLive/Sources/Chat/Original/OriginalTabItemView.swift @@ -15,15 +15,10 @@ struct OriginalTabItemView: View { var body: some View { VStack(alignment: .leading, spacing: 4) { - KFImage(URL(string: item.imageUrl!)) - .placeholder { Color.gray.opacity(0.2) } - .retry(maxCount: 2, interval: .seconds(1)) - .cancelOnDisappear(true) - .resizable() - .scaledToFill() - .frame(width: size, height: size * 432 / 306) - .clipped() - .cornerRadius(16) + DownsampledKFImage( + url: URL(string: item.imageUrl!), + size: CGSize(width: size, height: size * 432 / 306) + ).cornerRadius(16) Text(item.title) .font(.custom(Font.preRegular.rawValue, size: 18)) diff --git a/SodaLive/Sources/Chat/Talk/TalkItemView.swift b/SodaLive/Sources/Chat/Talk/TalkItemView.swift index 051f7e7..0b0fa4e 100644 --- a/SodaLive/Sources/Chat/Talk/TalkItemView.swift +++ b/SodaLive/Sources/Chat/Talk/TalkItemView.swift @@ -16,14 +16,10 @@ struct TalkItemView: View { var body: some View { HStack(spacing: 13) { - KFImage(URL(string: item.imageUrl)) - .placeholder { Circle().fill(Color.gray.opacity(0.2)) } - .retry(maxCount: 2, interval: .seconds(1)) - .cancelOnDisappear(true) - .resizable() - .scaledToFill() - .frame(width: 76, height: 76) - .clipShape(Circle()) + DownsampledKFImage( + url: URL(string: item.imageUrl), + size: CGSize(width: 76, height: 76) + ).clipShape(Circle()) VStack(alignment: .leading, spacing: 6) { HStack(spacing: 4) { diff --git a/SodaLive/Sources/Content/ContentItemView.swift b/SodaLive/Sources/Content/ContentItemView.swift index c0c7520..2a3394f 100644 --- a/SodaLive/Sources/Content/ContentItemView.swift +++ b/SodaLive/Sources/Content/ContentItemView.swift @@ -17,12 +17,11 @@ struct ContentItemView: View { var body: some View { VStack(alignment: .leading, spacing: 0) { ZStack(alignment: .top) { - KFImage(URL(string: item.coverImageUrl)) - .cancelOnDisappear(true) - .resizable() - .scaledToFill() - .frame(width: 160, height: 160, alignment: .top) - .cornerRadius(16) + DownsampledKFImage( + url: URL(string: item.coverImageUrl), + size: CGSize(width: 160, height: 160) + ) + .cornerRadius(16) HStack(alignment: .top, spacing: 0) { Spacer() diff --git a/SodaLive/Sources/Content/Main/V2/ContentMainBannerViewV2.swift b/SodaLive/Sources/Content/Main/V2/ContentMainBannerViewV2.swift index 13fabe9..15da358 100644 --- a/SodaLive/Sources/Content/Main/V2/ContentMainBannerViewV2.swift +++ b/SodaLive/Sources/Content/Main/V2/ContentMainBannerViewV2.swift @@ -112,13 +112,11 @@ struct ContentMainBannerImageView: View { var body: some View { Group { if let boundURL { - KFImage(boundURL) - .cancelOnDisappear(true) - .downsampling(size: CGSize(width: width, height: height)) - .resizable() - .scaledToFill() - .frame(width: width, height: height) - .cornerRadius(4.7) + DownsampledKFImage( + url: boundURL, + size: CGSize(width: width, height: height) + ) + .cornerRadius(4.7) } else { Color.clear .frame(width: width, height: height) diff --git a/SodaLive/Sources/Content/Series/DayOfWeekSeriesView.swift b/SodaLive/Sources/Content/Series/DayOfWeekSeriesView.swift index 0716c2d..0c4c367 100644 --- a/SodaLive/Sources/Content/Series/DayOfWeekSeriesView.swift +++ b/SodaLive/Sources/Content/Series/DayOfWeekSeriesView.swift @@ -56,7 +56,7 @@ struct DayOfWeekSeriesView: View { .padding(.horizontal, 24) ScrollView(.horizontal, showsIndicators: false) { - HStack(spacing: 5) { + LazyHStack(spacing: 5) { ForEach(0..