fix(main): 추천 홈 후속 검증을 보완한다

This commit is contained in:
Yu Sung
2026-07-31 21:12:32 +09:00
parent 3ae2dc19d6
commit a8fe416cb5
38 changed files with 3161 additions and 163 deletions

View File

@@ -22,6 +22,7 @@ struct BannerCarousel: View {
@GestureState private var dragOffset: CGFloat = 0
@State private var autoScrollTimer: Timer?
@State private var isSwiping = false
@State private var itemsRevision = 0
init(
items: [BannerCarouselItem],
@@ -70,6 +71,7 @@ struct BannerCarousel: View {
.contentShape(Rectangle())
.simultaneousGesture(dragGesture(step: step))
.onChange(of: items) { _ in
itemsRevision += 1
displayIndex = items.count > 1 ? 1 : 0
restartAutoScrollTimer()
}
@@ -179,8 +181,15 @@ struct BannerCarousel: View {
private func wrapIfNeeded() {
guard items.count > 1 else { return }
displayIndex = min(max(displayIndex, 0), items.count + 1)
let scheduledIndex = displayIndex
let scheduledRevision = itemsRevision
if displayIndex == 0 {
DispatchQueue.main.asyncAfter(deadline: .now() + BannerCarousel.transitionDuration) {
guard displayIndex == scheduledIndex, itemsRevision == scheduledRevision else { return }
var transaction = Transaction()
transaction.disablesAnimations = true
withTransaction(transaction) {
@@ -189,6 +198,8 @@ struct BannerCarousel: View {
}
} else if displayIndex == items.count + 1 {
DispatchQueue.main.asyncAfter(deadline: .now() + BannerCarousel.transitionDuration) {
guard displayIndex == scheduledIndex, itemsRevision == scheduledRevision else { return }
var transaction = Transaction()
transaction.disablesAnimations = true
withTransaction(transaction) {