CarouselView中右滑手势无法正确切换至上一张卡片的问题求助
CarouselView中右滑手势无法正确切换至上一张卡片的问题求助
大家好,我最近在处理CarouselView的手势交互时遇到了一个棘手的问题,想请教下各位开发者。我做了一个带卡片的轮播视图,希望支持上下左右四个方向的滑动切换,目前上下左三个方向都能正常工作,唯独右滑的时候出问题——本来右滑应该切换到上一张卡片,但每次操作后还是显示当前的卡片。
下面是我的代码片段:
_Cards = new CarouselView { VerticalOptions = LayoutOptions.Start, IsSwipeEnabled = false, Loop = true }; _Cards.ItemsSource = cards.CardSeq; Border CardBorder = new Border { Content = new Label() { }, }; async Task MySwipe(SwipeDirection dir) { if (isAnimating) return; isAnimating = true; switch (dir) { case SwipeDirection.Up: await CardBorder.TranslateTo(0, -cardHeight, 300, Easing.SinIn); App.Database.GetReward((_Cards.CurrentItem as dict)!.Number, true); break; case SwipeDirection.Down: await CardBorder.TranslateTo(0, cardHeight, 300, Easing.SinIn); App.Database.GetReward((_Cards.CurrentItem as dict)!.Number, false); break; case SwipeDirection.Left: await CardBorder.TranslateTo(-cardWidth, 0, 300, Easing.SinIn); break; case SwipeDirection.Right: await CardBorder.TranslateTo(cardWidth, 0, 300, Easing.SinIn); break; }; //CardBorder.Opacity = 0; if (dir != SwipeDirection.Right) _Cards.Position = (_Cards.Position + 1) % cards.CardSeq.Count; else _Cards.Position = (_Cards.Position - 1 + cards.CardSeq.Count) % cards.CardSeq.Count; CardBorder.TranslationY = 0; CardBorder.TranslationX = 0; CardBorder.Opacity = 1; isAnimating = false; } <...> CardBorder.GestureRecognizers.Add(new SwipeGestureRecognizer { Direction = SwipeDirection.Up, Command = new Command(async () => await MySwipe(SwipeDirection.Up)) }); CardBorder.GestureRecognizers.Add(new SwipeGestureRecognizer { Direction = SwipeDirection.Down, Command = new Command(async () => await MySwipe(SwipeDirection.Down)) }); CardBorder.GestureRecognizers.Add(new SwipeGestureRecognizer { Direction = SwipeDirection.Left, Command = new Command(async () => await MySwipe(SwipeDirection.Left)) }); CardBorder.GestureRecognizers.Add(new SwipeGestureRecognizer { Direction = SwipeDirection.Right, Command = new Command(async () => await MySwipe(SwipeDirection.Right)) });
逻辑上,当触发右滑(SwipeDirection.Right)时,我计算的是(_Cards.Position - 1 + cards.CardSeq.Count) % cards.CardSeq.Count,比如当前位置是3的话应该变成2,但实际操作后位置又立刻变回3了。有没有大佬知道这是为什么,该怎么解决这个问题呢?
备注:内容来源于stack exchange,提问作者t232006
相关产品推荐
相关产品推荐

