Как нажать «Нравится» и «Не нравится» при перетаскивании карточек влево и вправо с помощью KolodaView Swift

Я использую kolodaview для быстрого просмотра карты. Все работает нормально, но я застрял в одном месте. Когда пользователь перемещает карточку влево или вправо, API говорит о том, что нравится или не нравится. Для этого левого и правого колода задан метод делегата:

       func koloda(_ koloda: KolodaView, draggedCardWithPercentage finishPercentage: CGFloat, in direction: SwipeResultDirection){
 if direction == .left {

 if finishPercentage == 100.0 {
    apifordislike()
  }
 } else if direction == .right{
    apiforlike()
 }
}

Его работа, но проблема в том, что при замене finishPercentage == 100.0 и нажатии API, но пользователь медленно перемещает API карты, ударяя более одного, 100.0 повторяется. Я хочу только один удар.

1 ответ

Решение

Почему бы не использовать

      func koloda(_ koloda: KolodaView, didSwipeCardAt index: Int, in direction: SwipeResultDirection) {

вместо?

В противном случае сохраните информацию о статусе - например,

...

      var alreadyLiked: Bool = false
var alreadyDisliked: Bool = false

...

      func koloda(_ koloda: KolodaView, draggedCardWithPercentage finishPercentage: CGFloat, in direction: SwipeResultDirection){
 if direction == .left {

 if finishPercentage == 100.0 {
    if !alreadyDisliked {
        alreadyDisliked = true
        apifordislike()
     }
  }
 } else if direction == .right{
    if !alreadyLiked {
        alreadyLiked = true
        apiforlike()
    }
 }
}

в вашем случае вы можете оставить две переменные на тот случай, если кто-то передумает изменить на «не нравится». Кроме того, вы можете захотеть перезапустить флаги, когда действие изменится с понравившегося на не понравившееся и наоборот.

Другие вопросы по тегам