0

我正在写一个纸牌游戏。当用户触摸他们手中的卡片时,他们正在触摸的卡片会稍微滑出以明确他们正在触摸的是哪张卡片,因为他们手中最多可以有 18 张卡片,而且它们有点小。我接下来想要的是让用户能够向上刷卡来玩它。

我曾尝试使用UISwipeGestureRecognizer,但由于用户在第一次触摸屏幕时可能会暂停(以确保正确的卡片滑出),因此它通常不会将其识别为滑动。用户也可以只是将他的手指滑到相邻的卡片上然后刷卡。所以,这是另一个问题,因为手势只能在触摸开始的 UIView 上被识别。

我能想到的最好的方法是UIPanGestureRecognizer在父视图(包含所有卡片的 UIView)上使用 a 。我可以使用它的速度来决定是否应该将其视为滑动。我必须设置cancelsTouchesInViewNO仍然只使用touchesBegan等来检测刷了哪张卡。有没有更好的办法?

4

2 回答 2

1

正如我在评论中所说,您可以通过继承 UIGestureRecognizer 来制作您自己的自定义滑动手势,而不是让 UIPanGesture 以可能不正常的方式工作。

看看这个链接。第一部分是关于一般手势,但后半部分是关于制作自定义手势。

http://www.raywenderlich.com/6567/uigesturerecognizer-tutorial-in-ios-5-pinches-pans-and-more

于 2012-06-25T17:53:50.433 回答
1

如果我正确理解您要做什么,我会尝试结合使用 UILongPressureGestureRecognizer 和 UISwipeGestureRecognizer。

UILongPressGestureRecognizer 是 UIGestureRecognizer 的一个具体子类,用于查找长按手势。用户必须在视图上按下一根或多根手指至少指定时间段才能发送操作消息。另外,手指可以只移动指定的距离来识别手势;如果他们超出此限制,则手势失败。

长按手势是连续的。当允许的手指数量 (numberOfTouchesRequired) 在指定的时间 (minimumPressDuration) 内被按下并且触摸没有超出允许的移动范围 (allowableMovement) 时,手势开始 (UIGestureRecognizerStateBegan)。每当手指移动时,手势识别器就会转换到 Change 状态,并在任何手指抬起时结束 (UIGestureRecognizerStateEnded)。

UILongPressGestureRecognizer将允许用户“挑选”卡片;如果他们移动手指太多(即,在连续的卡片上),则手势失败。

在其中,UIGestureRecognizerStateBegan您可以设置一个变量来跟踪当前“挑选”的卡片(只要它保持不变)。

如果用户随后在父视图(包含所有卡片的视图)上滑动,您将移动卡片。

另一方面,我觉得这在touchesBegan/ touchesMoved/方面实现起来不会那么复杂,touchesEnded并且这可能是处理它的最合适的方式。

于 2012-06-25T15:19:45.757 回答