fix(main): 추천 홈 후속 검증을 보완한다
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user