SwiftUI-CardStackView icon indicating copy to clipboard operation
SwiftUI-CardStackView copied to clipboard

The second card pass through the first one after swiping

Open ghost opened this issue 5 years ago • 3 comments

Look closely, the second card pass through the first one after swiping, before it completely disappear. It looks / feels like the first card moved backwards and been drew out after the second card.

20200915@105212@2x 20200915@105348@2x

ghost avatar Sep 15 '20 02:09 ghost

This is a known issue and in order to fix it I believe we need to change how we animate cards to outside of the screen. Current transition I used is one of SwiftUI defaults and needs to be replaced by custom animation. If you want to try fixing this or have any other way of fixing this, please let me know.

dadalar avatar Sep 15 '20 10:09 dadalar

Hi @dadalar It looks like adding zIndex(1) for CardView in the card function fixes animation

private func card(index: Data.Index, relativeIndex: Int) -> some View {
    CardView(
      direction: direction,
      isOnTop: relativeIndex == 0,
      onSwipe: { direction in
        self.onSwipe(self.data[index], direction)
        self.currentIndex = self.data.index(after: index)
      },
      content: { direction in
        self.content(self.data[index], direction, relativeIndex == 0)
          .offset(
            x: 0,
            y: CGFloat(relativeIndex) * self.configuration.cardOffset
          )
          .scaleEffect(
            1 - self.configuration.cardScale * CGFloat(relativeIndex),
            anchor: .bottom
          )
      }
    )
    .zIndex(1)
  }

ildarnm avatar Aug 28 '22 19:08 ildarnm

Hi @ildarnm. Interesting because you're setting the same zIndex (1) for all cards. Maybe we can set negative index argument (.zIndex(-index)) or relativeIndex? Do you want to create a PR for that so that you can be the author?

dadalar avatar Aug 30 '22 10:08 dadalar